小弟最近在学习多线程编程,遇到了一些问题,一直想不明白,请大家帮帮忙。
问题如下:
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.比如有A、B、C三个线程,想要A线程在空闲状态下才执行,是不是要等B、C执行完才算空闲,A才执行。
3.如果如2所说,那和我用单线程让他们按照想要的顺序执行有什么区别?
4.让线程进入sleep算不算空闲,如2中,我让B、C执行Sleep,那么是不是就算进入空闲状态,是不是A就可以执行了?如果可以执行的话,A算是在空闲状态下执行吗?
5.线程在Sleep状态下的受信状态是怎么样的?一口气把心里的疑惑都写出来了,希望大家多多帮忙啊,感激不尽啊~~o(∩_∩)o...
只是看上去是并行的,实际上还是一个时间片一个线程执行.3.如果如2所说,那和我用单线程让他们按照想要的顺序执行有什么区别?
如果是顺序执行的话,会出现效率低 等等不好的情况,比如说你有一个UI界面线程 ,还有两个工作者线程,当处理的线程处理的数据很复杂时,如果你按顺序执行会出现界面假死(就像死了一样的),这也是多线程的好处.....
2.情况并非如此,空闲线程仅仅是在同一段时间内得到的时间片比其他线程少,即使在高优先级线程还未执行完的情况下,他也能够执行。
3.没有办法可以控制线程执行次序。
4.如果只有这三个线程的话,其他两个都sleep,系统就不会为它们分配cpu时间,这时空闲线程会执行。关于后边的不知道怎么回答,建议lz不要钻牛角尖。
5.不知道什么是受信状态?
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
);