在线程池里调用一个线程完成任务后,线程池会将线程置于空闲,等待下个任务。但是线程被调用以后,会撤销线程相关资源,无法再被调用;所以,我只能重新创建一个新线程放到线程池中。但这样效率不是很高,请问线程池是如何实现同一个线程可以反复执行任务的呢?
解决方案 »
- 急!急!win32下做的DLL里面有个发送消息,在MFC里面接收消息!怎么接收不到呢?
- ACE的Proactor框架接收数据的问题
- 十万火急求教各位大虾,使用MFC读取和写入Excle数据的时候,当函数退出后在资源管理器中存在Excle.exe
- 怎样令字显示在背景图上,而仍可以看到背景图?
- 100分在线等!---关于Html对话框的问题!
- *****调色板******
- 有没有什么皮肤工具,能够在每个不同的CDialog中,设置不同的风格??
- 一个棘手的通讯问题!!!!请教大家
- 很久没有上来了, 发现我以前的帖子都不见了,怎么样才能要回来,这些帖子对我很宝贵的.
- 本人想做一个类似 cell 的组件,收集建议。(一定高分相送~~)
- 新手真没招了...vs2010的时候出现'CDialog' : base class undefined
- 找不到.asm文件,如何解决?立即结贴,等。。。
谁叫你销毁了,如果销毁再创建,还有线程池的必要么?
直接看代码,可能你会好理解一点//线程函数伪代码
DWORD tfunc(void* p)//线程函数
{
while(!isQuit())//是否需要退出线程
{//线程循环
if(TaskList.IsEmpty())//任务队列是否为空
waitTaskList();//如果是空队列则等待队列不为空的信号(可以使用等待信号API使线程休眠)
else
{
work w=TaskList.getTask();//取出任务并执行之
dowork(w);
}
}
}
//在管理任务时,一但有新的任务加入队列就重置队列信号,处于休眠状态的线程会被唤醒。
用这个控制
WaitForMultipleObjectswhile (TRUE)
{
dwWaitRtn = WaitForMultipleObjects(2,hWriteHandle,FALSE,8000);
if (dwWaitRtn == WAIT_OBJECT_0)
{
Task();
}
if (dwWaitRtn == WAIT_TIMEOUT)
{
//exit
}
}