能力值:
( LV4,RANK:50 )
|
-
-
2 楼
板凳!!!!!!!!!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这是垃圾程序,不知道从哪里随便弄一段程序,一点用没有。
而且这段程序烂的很。
解释如下:
如果这段程序是UI线程里面,那么用 Sleep(1) 是个很糟糕的做法。
如果这段程序是后台工作线程,那么 AfxGetMainWnd()->SetDlgItemText(IDC_STATIC_1, temp); 明显是跨线程操作,容易引起界面崩溃。
我估计这个可能是那本书上面摘录下来的。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
三楼太犀利了.
跨线程不这样写要如何写才好呢.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
那么跨线程刷新界面应该主怎么做呢?
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
工作线程向UI postmessage 然后工作线程继续往下走 UI收到消息去更新界面 互相不干涉
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你好,看到你的留言,由于本人小菜一个无权限在该板块发言,所以发Email咨询一下,忘详细解释。谢谢了先。
如果这段程序是UI线程里面,那么用 Sleep(1) 是个很糟糕的做法。
为什么呢?
hahadazu 网友发过来咨询的,我就在这里做解释了:
通常windows的sleep,最低大概是55ms左右,sleep(1)和sleep(55) 大题上是差不多效果的。
线程在调用sleep之后,那么该线程会进入睡眠状态,停止响应,对于UI线程,他的表现就是停止界面的响应,因为UI线程调用sleep是绝对的大忌。
至于上面提的跨线程刷新界面实现有多种方式,
还有一种方式就是采用共享全局变量,然后在UI线程启用定时器,自动更新之。lz的例子里面的大概意思是需要在界面上面显示一个在线主机的个数,这个数量可能会在工作线程里面进行修改,那么UI线程读取,工作线程写,倒也不冲突,在UI线程里面定时更新下就好。
|
|
|