线程里的Sleep 阻塞后消息接不到 no

经常在线程中用到等待 程序逻辑大多都是无限循环  比如说用线程维护一个目录  一直读取目录下面的文件


1:当有个调度线程是间隔调度或是定时调度的时候

这个时间是比较长的   这时可以用一个线程来处理  (观察者模式可以很好的解决这类长时间的问题)

这个方法是最好的  但逻辑稍微复杂一点  不过也好实现


2:当目录下没有文件时就会等待一小会  这可以设置成10s或者20s  或是当时间都是那些不长不断  几分钟的时候   又不愿意浪费资源新启一个线程的时候,

这种情况下选择Sleep()也不错  但是会出现一个问题

这个Sleep所在的线程就会被阻塞  收不到其他人发的消息   比如说 你sleep 1分钟的时候 用户需要停止服务 或是关掉你的程序 

这时1分钟就非常长了  因为说不定你启了多个线程  而线程中有嵌套了一些其他的Sleep() 这时就可能达到5分钟或者以上



有个好的解决方法  :  用资源(效率)换取 程序的灵活性

    // sleep 1800s
    // Sleep(1000 * 1800);
    for (int i = 0; i < 1800; ++i)
    {
      Sleep(1000);
      if (有消息吗)
      {
        break;
      }
    }


而且这样写也不会影响到其他的线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值