为了账号安全,请及时绑定邮箱和手机立即绑定

线程池中一个线程给一个信号量阻塞另一个线程运行

线程池中一个线程给一个信号量阻塞另一个线程运行

噜噜哒 2018-11-22 05:02:56
线程池中有两个线程,A,B,其中B是一个轮询线程,使用了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadPool.RegisterWaitForSingleObject(waitObj, new WaitOrTimerCallback(test), null, 5000, false);<BR></P> <P>我希望通过线程A来,来控制(阻塞或是继续)其轮询过程<
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

用WaitOne方法,就可以阻塞啦.. 不知道,你想怎么用,如果你希望的是,当通知有数据需要处理的时候,可以用Queue,然后用While去判断这个Queue的长度是否大于0,如果是,就Set, 反之WaitOne .....

查看完整回答
反对 回复 2018-11-23
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

你只需要在你的线程函数里面有一个循环,每次先等待某个信号量就可以了了。 2008-08-09 更新: 昨天奥运开幕了~~~~ 我并不确定.NET是否提供了默认的支持。详细的方案,还是要多看看MSDN。找找上面有没有特定的解决方案。 如果我来做,我会这样做: 1. 将线程中需要执行的动作划分为多个单元。 一般情况下,长时间执行的线程中都会有循环或多个嵌套的循环。循环体的开始部分应该就是我所说的单元的边界。 2. 定义一个信号量 在启动一个线程的时候,为这个线程定义一个信号量。 3. 在单元的分界点检查信号量 在每个单元的开始处,检查信号量,如果信号量被设置,设置一个循环不断的检查该信号,直到信号量被复位,再继续开始这个单元的执行。 因此,如果你希望能够产生立刻中断的感觉,只需要将执行单元划分的足够细小。就可以了。其中需要注意的是:在循环检查信号量的循环体中,最好让线程Sleep一下。否则,会CPU占用率很高。 思路大概如此,具体的代码实现,因为很久没有写过这方面的代码了,就不花时间去写和调试了。多看看MSDN,应该很容易实现上面的思路的。

查看完整回答
反对 回复 2018-11-23
  • 2 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信