小弟最近在学习多线程编程,遇到了一些问题,一直想不明白,请大家帮帮忙。
问题如下:
1.如何让一个线程在空闲状态下才执行?
2.比如有A、B、C三个线程,想要A线程在空闲状态下才执行,是不是要等B、C执行完才算空闲,A才执行。
3.如果如2所说,那和我用单线程让他们按照想要的顺序执行有什么区别?
4.让线程进入sleep算不算空闲,如2中,我让B、C执行Sleep,那么是不是就算进入空闲状态,是不是A就可以执行了?如果可以执行的话,A算是在空闲状态下执行吗?
5.线程在Sleep状态下的受信状态是怎么样的?一口气把心里的疑惑都写出来了,希望大家多多帮忙啊,感激不尽啊~~o(∩_∩)o...

解决方案 »

  1.   

    所谓空闲 是没有什么操作,比如你移动鼠标的时候不知道有多少时间是空闲时间,问题2 对于c在空闲执行并不是说a,b执行完了再执行,操作系统是分时的,一个个时间片 
      只是看上去是并行的,实际上还是一个时间片一个线程执行.3.如果如2所说,那和我用单线程让他们按照想要的顺序执行有什么区别? 
       如果是顺序执行的话,会出现效率低 等等不好的情况,比如说你有一个UI界面线程 ,还有两个工作者线程,当处理的线程处理的数据很复杂时,如果你按顺序执行会出现界面假死(就像死了一样的),这也是多线程的好处.....
      

  2.   

    learning .....   thanks 
      

  3.   

    1. 我想这个得设置线程优先级,把这个线程的优先级设置到最低,windows有七个相对线程优先级,最低是空闲,在创建C线程的时候设置优先级。我想这个问题并不能精确控制,因为何时调用那个线程要看windows的线程调度算法。
    2.情况并非如此,空闲线程仅仅是在同一段时间内得到的时间片比其他线程少,即使在高优先级线程还未执行完的情况下,他也能够执行。
    3.没有办法可以控制线程执行次序。
    4.如果只有这三个线程的话,其他两个都sleep,系统就不会为它们分配cpu时间,这时空闲线程会执行。关于后边的不知道怎么回答,建议lz不要钻牛角尖。
    5.不知道什么是受信状态?
      

  4.   

    找来的线程优先级是相对于进程的,提高进程优先级就可以提高线程优先   
      BOOL   SetPriorityClass(   
          HANDLE   hProcess,                 //   handle   to   the   process   
          DWORD   dwPriorityClass       //   priority   class   value   
      );    BOOL   SetThreadPriority(   
          HANDLE   hThread,   //   handle   to   the   thread   
          int   nPriority       //   thread   priority   level   
      );