注册 登录
编程论坛 VC++/MFC

关于多线程的一个问题

邵帅 发布于 2013-03-04 08:51, 1019 次点击
对于同时运行的多个线程,当一个线程得到cpu时间后,除非sleep(不考虑销毁),否则其他线程是不会有机会执行的。
我在一个线程让他:sleep(5000);结果发现程序每隔5秒卡一下。。郁闷。
而如果sleep(50),就不会卡,求解释。
8 回复
#2
wp2319572013-03-04 09:01
5000不就是相当于5秒吗

50 相当于0.05秒 估计肉眼就感觉不到了
#3
邵帅2013-03-04 09:06
回复 2楼 wp231957

首先为什么5秒的时候会卡呢?只是让这个线程交出cpu控制权5秒,不该会卡啊?
#4
wp2319572013-03-04 09:06
5秒还不卡吗  5秒是一个很长的时间概念啊
#5
邵帅2013-03-04 09:11
那应该是这个线程卡,而不是界面线程卡啊。
#6
yuccn2013-03-04 10:15
sleep 后,就会有线程切换了,卡的原因是因为你sleep的线程是UI线程.

你在非UI线程sleep就不感觉卡了.
多线程程序中,一般都是把工作的事情放多非UI线程的.这样在事件等待的时候,就不会使用户感觉卡,体验上给用户人性.
UI线程sleep 不到一秒都不会有很明显的感觉卡的.
#7
邵帅2013-03-04 11:15
回复 6楼 yuccn
UI线程就是指包含界面更新代码的线程吗?
我建了一个线程用来接收socket发来的数据,并根据数据来更新界面。
#8
yuccn2013-03-04 12:17
是的 UI线程 就是指界面线程,user interface

“我建了一个线程用来接收socket发来的数据,并根据数据来更新界面。”

子线程接受和发送数据就行了,没有必要子线程来更新界面。。更新界面有UI线程做就行了
子线程接受到数据,通过消息发送给给主窗口,由ui线程来刷新窗口就行了。子线程更新窗口这个是很挫的设计,一般都不会这样设计的。不然,子线程在操作窗口,UI线程也在操作窗口,会乱的
#9
邵帅2013-03-04 12:40
回复 8楼 yuccn
说的是,多谢。
1