2015-04-06 44 views
0

我使用德爾福XE 5,它使用印來管理我的服務器應用程序如何等待所有線程在印第安納波利斯的線程池來完成

每個客戶端連接都有自己的會話這是完美的應用

現在我需要在aysnc方式其中一個會話中執行多個任務

當所有這些任務已經完成控制可以返回給調用者

我期待到使用本地範圍的線程池在我的公關要執行到線程池

我所見過的TIdThreadMgrPool看起來完美ocedure,這將使每個任務

如何等到所有的線程已經完成?

保羅

回答

1

印9的TIdThreadMgrPool成分(在印10 TIdSchedulerOfThreadPool部件更換)不是通用線程池。它僅用作Indy的TIdTCPServer組件的客戶端線程池。沒有選項可以等待活動線程完成運行,TIdTCPServer可以在內部關閉時處理。

有很多第三方通用德爾福可用的線程池實現,如OmniThreadLibrary。如果您使用的是XE7,則可以利用其新的Parallel Programming Library來代替。

+0

謝謝我不能使用XE 7我打算使用OmniThreadLibrary,但是我遇到了捕獲異常原因的問題,我擔心將Indy與Indy結合使用是個好主意,因爲OmniThreadLibrary使用全局線程池所以我擔心其他indy會話會因使用全局池而變慢,因此尋找可以使用1個過程 – Paul

+0

的上下文來運行異步任務的內容。如果您只是想要一個本地池來阻塞調用線程,直到任務完成後,您可以創建一個普通的'TThread'對象數組,並將它們的'Handle'值傳遞給Win32 API'WaitForMultipleObjects()'函數。 –

+0

謝謝!這裏的方法很好嗎? http://stackoverflow.com/questions/6867105/waiting-for-multiples-threads-using-waitformultipleobjects請參閱Sertac Akyuz的回答 – Paul