在多线程环境中使用Sleep函数会有什么有关问题
在多线程环境中使用Sleep函数会有什么问题?
eg:
Sleep(1000); //会对主程序有影响吗?
------解决方案--------------------
无条件阻塞了。。。
------解决方案--------------------
参考Sleep源代码(如果有的话)
------解决方案--------------------
是的,至少会阻塞1000ms,不影响其他线程
其他线程反而从中获得一定的利益,有1个线程在1000ms内不参与cpu时间片的竞争。
------解决方案--------------------
其他影响目前我还没遇到过,或者可能没有影响到我的代码功能!
具体的得看看Sleep的源码已经和你的代码
------解决方案--------------------
主板设计的问题
------解决方案--------------------
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
《Windows核心编程》
------解决方案--------------------
The sleep() function shall cause the calling thread to be suspended from execution until either the number of
realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and
its action is to invoke a signal-catching function or to terminate the process. The suspension time may be longer
than requested due to the scheduling of other activity by the system.
------解决方案--------------------
sleep和Sleep不一样
------解决方案--------------------
如果各个线程,独立运行的话,那么什么问题也没有;
如果有同步,那么其它线程也会受到影响,
如果有消息处理,那么,消息会阻塞1秒---不知道有多少消息会阻塞,
如果有定时器,定时器又采用消息的方式,
MFC定时器就是这样的,那么定时器也会阻塞,
如果定时器间隔较小,那么会有很多定时器时间到,的消息阻塞在这一秒---
Sleep的线程,什么也不做,那么如果占有其它线程需要的资源,必须等他1秒后醒来去处理,
只有释放了(至少等1秒),其他线程,才有机会得到资源。
Windows Sleep 不是必须的.
------解决方案--------------------
你有吗?
------解决方案--------------------
老赵又被将了。他要是有win32的源码,呃。。
------解决方案--------------------
Windows的Sleep不会影响别的线程,(代码逻辑上引发的不论)
Linux的sleep据说是进程相关的,推荐用nanosleep来做 (但我再ubuntu11.04下测试sleep,并非进程相关的)
------解决方案--------------------
即便是因为时间片原因没有及时解除阻塞, 也不可能到Sleep(5000)的效果, 我觉得还是你自己代码的问题.
------解决方案--------------------
eg:
Sleep(1000); //会对主程序有影响吗?
C++
------解决方案--------------------
无条件阻塞了。。。
------解决方案--------------------
参考Sleep源代码(如果有的话)
------解决方案--------------------
是的,至少会阻塞1000ms,不影响其他线程
其他线程反而从中获得一定的利益,有1个线程在1000ms内不参与cpu时间片的竞争。
------解决方案--------------------
其他影响目前我还没遇到过,或者可能没有影响到我的代码功能!
具体的得看看Sleep的源码已经和你的代码
------解决方案--------------------
主板设计的问题
------解决方案--------------------
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
《Windows核心编程》
------解决方案--------------------
The sleep() function shall cause the calling thread to be suspended from execution until either the number of
realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and
its action is to invoke a signal-catching function or to terminate the process. The suspension time may be longer
than requested due to the scheduling of other activity by the system.
------解决方案--------------------
sleep和Sleep不一样
------解决方案--------------------
如果各个线程,独立运行的话,那么什么问题也没有;
如果有同步,那么其它线程也会受到影响,
如果有消息处理,那么,消息会阻塞1秒---不知道有多少消息会阻塞,
如果有定时器,定时器又采用消息的方式,
MFC定时器就是这样的,那么定时器也会阻塞,
如果定时器间隔较小,那么会有很多定时器时间到,的消息阻塞在这一秒---
Sleep的线程,什么也不做,那么如果占有其它线程需要的资源,必须等他1秒后醒来去处理,
只有释放了(至少等1秒),其他线程,才有机会得到资源。
Windows Sleep 不是必须的.
------解决方案--------------------
参考Sleep源代码(如果有的话)
你有吗?
------解决方案--------------------
参考Sleep源代码(如果有的话)
你有吗?
老赵又被将了。他要是有win32的源码,呃。。
------解决方案--------------------
Windows的Sleep不会影响别的线程,(代码逻辑上引发的不论)
Linux的sleep据说是进程相关的,推荐用nanosleep来做 (但我再ubuntu11.04下测试sleep,并非进程相关的)
------解决方案--------------------
我同事碰到一个奇怪的现象:他在子线程里面
Sleep(1000); //但 现象是有时候会出现Sleep(5000)的效果。
即便是因为时间片原因没有及时解除阻塞, 也不可能到Sleep(5000)的效果, 我觉得还是你自己代码的问题.
------解决方案--------------------
参考Sleep源代码(如果有的话)
你有吗?
老赵又被将了。他要是有win32的源码,呃。。
; *** Sleep (857) ***
; SYM:Sleep#24EE
0x7c8024ee 8bff mov edi,edi
0x7c8024f0 55 push ebp
0x7c8024f1 8bec mov ebp,esp
0x7c8024f3 6a00 push 0x0
0x7c8024f5 ff7508 push dword ptr [ebp+0x8]