2012-05-01 77 views
3

我有啓動多個線程裏面做一些東西,聽一些港口等處理如何保持進程運行?

後,它開始的所有線程,主線程目前進入一個無限循環:

它是這樣的:

int main() 
{ 
    //start threads 
    while (true) 
    { 
     sleep(1000); 
    } 
} 

額外sleep保證了主線程不吃處理器。

是這種方法好不好?是否有一個關於流程如何保持活力的行業標準?謝謝。

編輯:一些澄清:

  • 線程是聽衆,所以joinWaitForSingleObject是不是一種選擇。通常我可以在這裏使用連接,但線程由第三個客戶端庫啓動,我無法控制它們。
  • 在主線程做一些處理不從設計的角度來看是有意義的。
+0

你需要一種方法來打破主循環? – Nick

+3

爲什麼加入一個線程不是一個選項?在所有其他線程完成之前,您只是不想退出主線程。調用所有的tid加入將會做到這一點。 – Stan

+0

發生什麼事情與所有downvoting?!? – Nick

回答

1

我不認爲有行業標準

你有什麼是運行在主線程的一個完全可以接受的。但是,您可能想要包含一種突破循環的方法。

其他方法包括:

  • 等待所有工作線程使用join命令來完成。
  • 等待在其中可以被用信號通知給退出循環的主線程的event
  • 使用主線程完成當前由工作線程完成的一些處理。
  • 定期檢查布爾標誌以決定是否退出。

在這一天結束,這取決於您的具體要求。

+0

爲什麼downvote? – Nick

+0

請參閱編輯的問題(我沒有downvote) – AMCoder

+0

如果你想要做的就是讓線程運行,那麼你有什麼沒有錯。如果您想要一種乾淨地退出(即不通過進程終止)的方式,那麼您將需要一種方法來實現當前解決方案所不具備的功能。 – Nick

2

我建議你有你的主線程等待別人的終止:

int main() { 
    // start threads 
    for(thread *t : threads) { 
    join(t); 
    } 
    // finalize everything or restart the thread 
    return 0; 
} 

如果您使用POSIX線程,pthread_join功能會做到這一點。

+0

查看編輯的問題。 – AMCoder

3

。從Linux Daemon Writing HOWTO部分拍攝,我想你想是這樣的:

int main() { 
    pid_t pid; 

    /* Fork off the parent process */  
    pid = fork(); 
    if (pid < 0) { 
      exit(EXIT_FAILURE); 
    } 
    /* If we got a good PID, then 
     we can exit the parent process. */ 
    if (pid > 0) { 
      exit(EXIT_SUCCESS); 
    } 
    // now start threads & do the work 

    for(thread *t : threads) { 
      join(t); 
    } 

    return 0; 
} 

這樣,主進程將退出,子進程將產生線程,這將做的工作。最後,子進程將在退出之前等待這些線程完成。

+0

+1:除了O.P.在談論'WaitForSingleObject'時,他建議他在Windows平臺上。 – Nick

+0

@尼克你是對的,我應該注意到。我猜想類似的事情可以用CreateProcess來完成,但我會把它留給其他人:-) – Stan