2012-03-10 14 views
0

を開始、私はこことpthreadのプログラミングにnoobの新たなんです。 私の問題は、私はスレッドをカプセル化するために作成しようとしていることを、C++クラスです。 私はpthreadを作成するときに、Cの関数をpthread_createに渡して起動時に実行する必要があることを見ていました... pthreadがその関数を実行すると、stdoutのメッセージは出力されません!pthreadのではありませんcoutの印刷機能

しかし、あなたがコード見ればそれが良いでしょう:

int main() 
{ 
    Thread *th=new Thread(); 
    return 0; 
} 

:私はこのように呼んで (明らかにそれがコピーだと、インターネットのチュートリアルから貼り付け^^)メインで

void *runAtStart(void *threadid) 
{ 

    long tid; 
    tid = (long)threadid; 

    printf("Hello World! It's me, thread #%ld!\n", tid); 
    pthread_exit(NULL); 
} 


Thread::Thread() { 
    pthread_t threads[1]; 
    int rc; 
    long t; 
    for(t=0; t<1; t++){ 
     printf("In main: creating thread %ld\n", t); 
     rc = pthread_create(&threads[t], NULL, runAtStart, (void *)t); 
     if (rc){ 
     printf("ERROR; return code from pthread_create() is %d\n", rc); 
     // exit(-1); 
     } 
    } 
} 

を生成される出力は次のとおりです。

In main: creating thread 0 

誰かが理解してくれることを願っています! 私の英語には申し訳ありません! :) Inzirio

答えて

0

あなたのプログラムは正常に動作します。表示されている問題は、スレッドが実際に実行される前にmain()関数が復帰し、プログラムが終了することです。

これを簡単に証明する方法は、返品の前にsleep(5);main()に追加することです。より良い方法は、main()がすべてのスレッドが完了するまで待ってから復帰する方法を見つけることです。これを行うには、pthread_joinを実行するスレッドクラスにデストラクタを追加し、デストラクタを実際に呼び出してください:delete th;

+0

ありがとう、私はそれを試してみましょう!私はそれについてthougthしたくない! ;) – inzirio

関連する問題