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

标签 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 来排队工作的事情?

最佳答案

ThreadPool 不是长时间运行的操作或您想要显式控制线程的实例。

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

关于c++ - 终止使用 QueueUserWorkItem(win 32/nt5) 创建的线程池中长时间运行的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2755920/

相关文章:

java - 这两本书哪个更适合学习Java线程?

java - 在Java中使用ThreadPoolExecutor时如何通过超时取消特定任务?

c++ - XCode 4.5 是否支持 lambda?

c++ - 与 openmp 的 10 维蒙特卡洛集成

c++ - 如何确定 Win32 线程是否已终止?

winapi - 临界区对象可以存储在 std::vector 中吗?

c++ - 如何在此代码上访问 webbrowser 对象? C++

c++ - 是否可以使用一个类作为自己方法的返回类型

c++ - xcode 中的线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x0) 错误

c++ - 使用 QJsonDocument 将子字符串解析为 JSON