2010-05-03 100 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和另外一个线程来监视。只需创建线程并让操作系统担心多核处理器或任何处理器类型。