在使用QueueUserWorkItem(win 32 / nt5)创建的线程池中终止长时间运行的线程

时间:2010-05-03 03:05:46

标签: c++ multithreading winapi threadpool

我在Win32 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排队工作?

2 个答案:

答案 0 :(得分:5)

ThreadPool 是长时间运行操作的候选者,或者是您希望显式控制线程的实例。

此外,您应该考虑重构您的函数以允许使用中止标志正常退出,而不是强行终止该线程。

答案 1 :(得分:0)

不要使用Thread-Poll。而是使用后台线程,并使用另一个线程进行监控。只需创建线程,让操作系统担心多核处理器或任何处理器类型。

相关问题