0

割り当ての一部として、1 と 0 で構成されるファイルを圧縮しようとしています。私はこれを行うことに成功しましたが、スレッドの感触をつかむために、pthread を使用して簡単な進行状況を表示しようとしています。問題は、圧縮が完了した後にスレッドが実行されることです。これが私のプログラムです:

    void* compressShow(void *)
    {
        pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);

    cout<<"Compressing";

    while(1)
    {
        sleep(1);
        cout<<".";  
        sleep(1);
        cout<<".";
        sleep(1);
        cout<<".";
        sleep(1);
        cout<<".";  
        cout<<"\b\b\b\b";
    }

}

void compression(char *buffer, ofstream &outFile)
{
    //Some Compression code. Function executes each time a new line is lifted off the file. 
}  

int main(int argc, char *argv[])
{   

    if(argc < 3)
    {
        cout<<"You entered an insufficient number of command line arguments."<<endl;
    }

    else
    {
        ifstream inFile;
        inFile.open(argv[1], ios::in);
        ofstream outFile(argv[2]);

        char buffer[100] = {NULL};

        pthread_t thread;
        pthread_attr_t attribute;

        pthread_attr_init(&attribute);
        pthread_attr_setdetachstate(&attribute, PTHREAD_CREATE_DETACHED);

        pthread_create(&thread, &attribute, compressShow, (void *)5);

        while(inFile.good())
        {
     `     inFile.getline(buffer, 100, '\n');
           compression(buffer, outFile);
        }

        pthread_cancel(thread);
        //pthread_join(thread, NULL);
    }

    return 0;

}

while ループの前にスレッドを作成しているので、圧縮を行っているループと同時にスレッドが実行されることを期待しています。

4

1 に答える 1

1

これはスレッドとは関係ありません。で同じ効果を見る

int main()
{
    compressShow(0);
}

flush時々マニピュレータを送ってみてください。

于 2013-03-30T20:03:59.057 に答える