目前在网上查到两种方法:
(1) GetThreadExitCode(hTread,&m_hExitCode) 通过判断m_hExitCode 的值来判断线程是否在运行。
问题是:如果在线程A即将结束的时候,但还未完全结束,线程B调用该函数检测到m_hExitCode 的值为STILL_ACTIVE,认为线程仍在运行,线程B分配一些任务让线程A执行,但当任务分配完成的时候线程A已经结束,线程A不能继续执行任务,这种情况怎么办?
(2) WaitForSingleObject(hThread, dwMillseconds);
我是这么写的:
if(WaitForSingleObject(hSendThread, 100) == WAIT_TIMEOUT) //线程正在运行
{
//给线程分配任务
}
else //线程已结束,新建一个线程
{
DWORD dwThreadId = 0;
hThread = CreateThread(NULL, 0,ThreadProc, 0, 0, &dwThreadId);
//给线程分配任务
}问题是:dwMillseconds 大小为多少比较合适,上面的100是我随便写的。向各位请教,谢谢!
(1) GetThreadExitCode(hTread,&m_hExitCode) 通过判断m_hExitCode 的值来判断线程是否在运行。
问题是:如果在线程A即将结束的时候,但还未完全结束,线程B调用该函数检测到m_hExitCode 的值为STILL_ACTIVE,认为线程仍在运行,线程B分配一些任务让线程A执行,但当任务分配完成的时候线程A已经结束,线程A不能继续执行任务,这种情况怎么办?
(2) WaitForSingleObject(hThread, dwMillseconds);
我是这么写的:
if(WaitForSingleObject(hSendThread, 100) == WAIT_TIMEOUT) //线程正在运行
{
//给线程分配任务
}
else //线程已结束,新建一个线程
{
DWORD dwThreadId = 0;
hThread = CreateThread(NULL, 0,ThreadProc, 0, 0, &dwThreadId);
//给线程分配任务
}问题是:dwMillseconds 大小为多少比较合适,上面的100是我随便写的。向各位请教,谢谢!
需求是最简单的任务队列应用。你需要先写一个任务队列。 最最最简单的写法是用一个event和一个mutex以及链表组成的结构。然后,开启多个线程阻塞在这个event上,当event开启的时候,线程再加锁并尝试从链表中取出一个任务。结束很简单,在临界数据里加一个布尔标志就可以了。