线程池中有两个线程,A,B,其中B是一个轮询线程,使用了 ThreadPool.RegisterWaitForSingleObject(waitObj, new WaitOrTimerCallback(test), null, 5000, false);<BR></P> <P>我希望通过线程A来,来控制(阻塞或是继续)其轮询过程<
2 回答
开满天机
TA贡献1786条经验 获得超13个赞
用WaitOne方法,就可以阻塞啦.. 不知道,你想怎么用,如果你希望的是,当通知有数据需要处理的时候,可以用Queue,然后用While去判断这个Queue的长度是否大于0,如果是,就Set, 反之WaitOne .....
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
你只需要在你的线程函数里面有一个循环,每次先等待某个信号量就可以了了。 2008-08-09 更新: 昨天奥运开幕了~~~~ 我并不确定.NET是否提供了默认的支持。详细的方案,还是要多看看MSDN。找找上面有没有特定的解决方案。 如果我来做,我会这样做: 1. 将线程中需要执行的动作划分为多个单元。 一般情况下,长时间执行的线程中都会有循环或多个嵌套的循环。循环体的开始部分应该就是我所说的单元的边界。 2. 定义一个信号量 在启动一个线程的时候,为这个线程定义一个信号量。 3. 在单元的分界点检查信号量 在每个单元的开始处,检查信号量,如果信号量被设置,设置一个循环不断的检查该信号,直到信号量被复位,再继续开始这个单元的执行。 因此,如果你希望能够产生立刻中断的感觉,只需要将执行单元划分的足够细小。就可以了。其中需要注意的是:在循环检查信号量的循环体中,最好让线程Sleep一下。否则,会CPU占用率很高。 思路大概如此,具体的代码实现,因为很久没有写过这方面的代码了,就不花时间去写和调试了。多看看MSDN,应该很容易实现上面的思路的。
- 2 回答
- 0 关注
- 429 浏览
添加回答
举报
0/150
提交
取消