实现线程池时,遇到一个有关问题,就是线程怎么实现重复使用
【求助】实现线程池时,遇到一个问题,就是线程如何实现重复使用?
在线程池里调用一个线程完成任务后,线程池会将线程置于空闲,等待下个任务。但是线程被调用以后,会撤销线程相关资源,无法再被调用;所以,我只能重新创建一个新线程放到线程池中。但这样效率不是很高,请问线程池是如何实现同一个线程可以反复执行任务的呢?
------解决方案--------------------
个人想法:
你需要把资源封包。
把“包”也放到某个池里。用的时候直接分配“包关联”、初始化资源就好了。
个人觉得,关于线程对象的创建销毁,内核实现起来应该是非常快的。大部分时间片都用在了资源的申请上。
------解决方案--------------------
把任务排队,线程一个个去调用
------解决方案--------------------
我的问题是线程调用一个任务后,线程就会被销毁,谁叫你这么做的
------解决方案--------------------
http://jacky-dai.iteye.com/blog/1090285
------解决方案--------------------
线程池中的线程,初始化的时候先启动 n 个线程,都处于挂起状态,需要使用的时候唤醒,使用完成后再让其挂起,等待下一次的启动,而不是销毁。明白?
------解决方案--------------------
声明一个使主线程和辅助线程 同时 可见的 变量 ,使用 关键段限制访问,修改 就好了
------解决方案--------------------
------解决方案--------------------
不要让线程退出就是了撒。
用这个控制
WaitForMultipleObjects
while (TRUE)
{
dwWaitRtn = WaitForMultipleObjects(2,hWriteHandle,FALSE,8000);
if (dwWaitRtn == WAIT_OBJECT_0)
{
Task();
}
if (dwWaitRtn == WAIT_TIMEOUT)
{
//exit
}
}
在线程池里调用一个线程完成任务后,线程池会将线程置于空闲,等待下个任务。但是线程被调用以后,会撤销线程相关资源,无法再被调用;所以,我只能重新创建一个新线程放到线程池中。但这样效率不是很高,请问线程池是如何实现同一个线程可以反复执行任务的呢?
------解决方案--------------------
个人想法:
你需要把资源封包。
把“包”也放到某个池里。用的时候直接分配“包关联”、初始化资源就好了。
个人觉得,关于线程对象的创建销毁,内核实现起来应该是非常快的。大部分时间片都用在了资源的申请上。
------解决方案--------------------
把任务排队,线程一个个去调用
------解决方案--------------------
我的问题是线程调用一个任务后,线程就会被销毁,谁叫你这么做的
------解决方案--------------------
http://jacky-dai.iteye.com/blog/1090285
------解决方案--------------------
线程池中的线程,初始化的时候先启动 n 个线程,都处于挂起状态,需要使用的时候唤醒,使用完成后再让其挂起,等待下一次的启动,而不是销毁。明白?
------解决方案--------------------
声明一个使主线程和辅助线程 同时 可见的 变量 ,使用 关键段限制访问,修改 就好了
------解决方案--------------------
------解决方案--------------------
不要让线程退出就是了撒。
用这个控制
WaitForMultipleObjects
while (TRUE)
{
dwWaitRtn = WaitForMultipleObjects(2,hWriteHandle,FALSE,8000);
if (dwWaitRtn == WAIT_OBJECT_0)
{
Task();
}
if (dwWaitRtn == WAIT_TIMEOUT)
{
//exit
}
}