本帖最后由 vatajoan 于 2013-10-09 10:59:17 编辑

解决方案 »

  1.   

    每一个线程都有一个消息队列,你可以添加一个GetMessage消息循环,这样处理任务时通过给线程发送消息,没有消息时就一直等待,
      

  2.   

    这个很明显,使用线程同步对象。比如事件对象。
    线程在没有任务的时候设置事件为无信号,并等待事件。
    此时线程被阻塞在那里,不消耗CPU资源。
    有任务来的时候,设置事件为有信号,线程马上被释放,继续执行。
      

  3.   

    使用内核同步对象的效率还没有使用Sleep的高啊
      

  4.   

    使用内核同步对象唤醒线程,还没有使线程Sleep(1)定时查询的效率高
      

  5.   

    消息队列就一定要和窗口扯上关系吗?无语!个人也只是个建议而已,不然就用事件等内核对象,然后WaitForSingleObject等待
      

  6.   

    想达到实时唤醒, 那是不可能的, 就算你优先级再高的线程也会被分配时间片, 有时间片轮转.可以使用事件, Wait,事件有信号, 有信号就开始"可以"执行.也可以让线程暂停, 然后可以执行的时候再让其继续, 但这样不好控制代码的执行.
      

  7.   

    请问,什么样的业务连一毫秒的延迟都不能容忍?我想破脑袋都没想到有什么方法能够控制1ms以内。wait之类同样需要等待时间片,本人对你所需的业务表示怀疑
      

  8.   

    1. 消息队列和窗口扯不上关系,单独创建的线程为什么不能有消息队列?
       当然不是说支持消息队列的方式,而是觉得楼主的理解可能有问题。这里顶下jzycode
    2. Windows不是实时操作系统,楼主如果有这么苛刻的要求,是不是考虑不用Windows啊
      

  9.   

    表面上看起来多么不同的任何办法,本质都是消息驱动
    Wait...Object可能是相对比较友好的办法
      

  10.   

    Sleep(1)定时查询的效率高是低效的。
    大量时间都用于定时查询了。
      

  11.   

    要求有点高,而且好像不占CPU和实时唤醒在普通的操作系统是矛盾的。
    可以用Sleep(0),然后把线程优先级设到最高
      

  12.   

    https://code.csdn.net/kingsollyu/libx
    //=========================================================================
    // 函数名称: SuperSleep
    // 函数说明: void  高精度延时,cpu占用低,窗口不卡死,一次最大可延时几年 
    //=========================================================================
    // 参    数: __in int nTime 1000微秒 = 1毫秒 ; 1000毫秒 = 1秒
    // 参    数: __in int nSpeed 可空:毫秒  1:微秒 2:毫秒 3:秒  4:分  5:小时  6:天
    //=========================================================================
    void SuperSleep(__in int nTime,__in int nSpeed );