2010-12-06 171 views
4

即時通訊使用Ubuntu 10.10,Code :: Blocks和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中它就像那樣爲我工作。如果「主」也是一個線程,爲什麼它不能繼續運行?是關於POSIX線程嗎?

謝謝。

+0

對於便攜性,明確創建一個可連接狀態的線程與`pthread_attr_setdetachstate(ATTR,PTHREAD_CREATE_JOINABLE)` – 2010-12-06 20:27:44

回答

3

它會因爲您呼叫pthread_join而停止,並且您加入「到」的線程會有無限循環。

從該鏈接:

的在pthread_join()函數暫停 執行調用線程的直到 目標線程終止,除非 目標線程已經 終止。

+0

@Tolga:您可以觸發儘可能多線程的,只要你願意。在你的具體情況下,你必須在調用pthread_join之前將它們解僱,因爲你的線程在無限循環中掛起。您需要研究pthread庫的工作方式...請參閱https://computing.llnl.gov/tutorials/pthreads/ – 2010-12-06 21:41:41

7

pthread_join將阻塞,直到thread1完成(呼叫pthread_exit或返回),它(因爲它有一個無限循環)它永遠不會做。