2010-12-06 6 views
4

私はUbuntu 10.10、Code :: Blocks with GCC 4.2を使用しています。メインがpthreadの後に続かない

私はそのようなコードを書かれている:

#include <iostream> 
#include <stdlib.h> 
#include <pthread.h> 

using namespace std; 

void *thread1proc(void* param){ 
    while(true) 
    cout << "1"; 

    return 0; 
} 

int main(){ 
    pthread_t thread1; 

    pthread_create(&thread1,NULL,thread1proc,NULL); 
    pthread_join(thread1,NULL); 

    cout << "hello"; 
} 

メインは、起動するスレッドを作成します。しかし、私にとって奇妙なのは、メインが走っていないということです。私は画面に "hello"メッセージが表示され、プログラムが終了することを期待しています。 Windowsでは、Delphiでそれは私のように働いたので。 「main」もスレッドである場合、なぜそれは実行を継続しませんか?それはPOSIXスレッドについてですか?

ありがとうございます。

+0

は移植性のために、明示的に(&ATTR、PTHREAD_CREATE_JOINABLE) ' –

答えて

3

これは、pthread_joinを呼び出し、 "to"に参加するスレッドに無限ループがあるため停止します。

そのリンクから: ターゲットスレッドがすでに が終了している場合を除き ターゲットスレッドが、終了するまで

でpthread_join()関数は、呼び出し元のスレッドの 実行を中断します。

+0

@Tolga pthread_attr_setdetachstate'と合流可能状態のスレッドを作成:あなたが好きなあなたは、できるだけ多くのスレッドを起動することができます。あなたの特定のケースでは、あなたのスレッドが無限ループでハングアップするので、pthread_joinの呼び出しの前にそれらを起動する必要があります。 pthreadライブラリの仕組みを調べる必要があります。こちらをご覧ください:https://computing.llnl.gov/tutorials/pthreads/ –

+0

@Tolga:pthreadとwindowsスレッドはかなり同様に動作します。しかし、Windowsにはjoin関数に相当するものはありません... – Goz

+0

Windows APIのように "resumeThread"のような関数はありませんか?私はスレッドの終了を待つことはしません。 – tcak

7

pthread_joinは、決して(それは無限ループを持つので)決して行うことはありません(pthread_exitを呼び出すか返す)までブロックします。

関連する問題