2010-05-03 99 views
0

我在Win32 nt5環境中編程。終止使用QueueUserWorkItem創建的線程池中的長時間運行線程(win 32/nt5)

我有一個函數將被調用很多次。每個電話都是原子的。我想用QueueUserWorkItem來利用多核處理器。

我遇到的問題是我只想給功能3秒鐘完成。如果它在3秒內沒有完成,我想終止線程。

目前,我做這樣的事情:

HANDLE newThreadFuncCall= CreateThread(NULL,0,funcCall,&func_params,0,NULL); 
DWORD result = WaitForSingleObject(newThreadFuncCall, 3000); 
if(result == WAIT_TIMEOUT) 
{ 
    TerminateThread(newThreadFuncCall,WAIT_TIMEOUT); 
} 

我只是生成一個單獨的線程並等待3秒,即可完成。有沒有辦法做類似的事情,但使用QueueUserWorkItem排隊工作?

回答

5

線程池是而不是長時間運行的操作的候選者或者您希望顯式控制線程的實例。

此外,您應該考慮重構您的函數,以允許使用中止標誌進行正常退出,而不是強制終止線程。

0

請勿使用線程輪詢。而是使用Background Thread和另外一個線程來監視。只需創建線程並讓操作系統擔心多核處理器或任何處理器類型。