社区
进程/线程/DLL
帖子详情
关于while循环不用sleep挂起还可以用什么方法
lylvtt
2012-03-29 07:41:23
比如一个循环
int n = 5;
while(n < 1)
{
n--;
}
这么一个循环我想每次都停留两秒;除了用sleep(2000)还可以用其他方式吗?
因为sleep让整个进程都停顿了,我不想这样
...全文
1338
28
打赏
收藏
关于while循环不用sleep挂起还可以用什么方法
比如一个循环 int n = 5; while(n < 1) { n--; } 这么一个循环我想每次都停留两秒;除了用sleep(2000)还可以用其他方式吗? 因为sleep让整个进程都停顿了,我不想这样
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
一桶姜山
2012-07-05
打赏
举报
回复
用peekmessage做while循环会使进程占用cpu达到100%
用getmessage做while循环会使得程序在没有收到任何message时无法进入循环内部。
个人认为只有新开线程或用timer做才是最好的方法
null
2012-07-05
打赏
举报
回复
计时器
schlafenhamster
2012-06-17
打赏
举报
回复
BOOL CMyView::PeekAndPump()
{
static MSG msg;
while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if (!AfxGetApp()->PumpMessage())
{
::PostQuitMessage(0);
return FALSE;
}
}
return TRUE;
}
Andox
2012-06-17
打赏
举报
回复
WaitForSingleObject这类函数
ok1234567
2012-05-25
打赏
举报
回复
WaitForSingleObject
WaitForSingleObjectEx
xuqing19830921
2012-05-25
打赏
举报
回复
把循环放到一个线程里,使用信号量或者事件或者消息之类的进行控制
搬砖的奶霸
2012-05-17
打赏
举报
回复
补充 Sleep() 是 阻塞的 用了以后 整个线程都会阻塞;
用我的方法 系统会会运行的 你多学习下 mfc的消息机制 呵呵
搬砖的奶霸
2012-05-17
打赏
举报
回复
当然可以了 !
太简单了wait(2000);
void Wait()
{
MSG msg;
if( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
{
::GetMessage(&msg, NULL, 0, 0 );
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
void Wait(LONG ms)
{
DWORD lT_old = GetTickCount();
DWORD lT = lT_old;
do
{
Wait();
lT = GetTickCount();
} while(lT - lT_old < (DWORD)ms);
}
w20120125
2012-05-17
打赏
举报
回复
哪个老师教你的,用Sleep整个进程都挂起来了?
breezes2008
2012-05-16
打赏
举报
回复
[Quote=引用 16 楼 的回复:]
SetWaitableTimer
MsgWaitForMultipleObjectsEx
[/Quote]
MsgWaitForMultipleObjectsEx 正解!
「已注销」
2012-05-12
打赏
举报
回复
// 不新开线程,不离开当下函数,就可以解决问题
DWORD time_begin;
MSG msg;
time_begin = GetTickCount();
SetTimer(0, 0, 20, 0);
while(GetMessage(&msg, 0, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
if(GetTickCount() - time_begin > 10*1000)
break;
}
KillTimer(0, 0);
lijianli9
2012-05-10
打赏
举报
回复
工作线程,界面线程能理解好,这个问题基本就解决了。
Lactoferrin
2012-05-10
打赏
举报
回复
SetWaitableTimer
MsgWaitForMultipleObjectsEx
longteng
2012-05-07
打赏
举报
回复
同意9楼的说法,使用单独的线程(新线程)执行循环操作, 如果需要与主进程进行交换,就用委托及事件处理即可
cracker234
2012-04-22
打赏
举报
回复
while入口条件改为时间判断就好了,判断是不是过去2秒了
tzxx
2012-04-21
打赏
举报
回复
不用线程的话,定时器应该也基本满足了
newseacher
2012-04-21
打赏
举报
回复
waitforsingleobject ?
窗户纸
2012-03-30
打赏
举报
回复
[Quote=引用楼主 的回复:]
比如一个循环
int n = 5;
while(n < 1)
{
n--;
}
这么一个循环我想每次都停留两秒;除了用sleep(2000)还可以用其他方式吗?
因为sleep让整个进程都停顿了,我不想这样
[/Quote]
从你的描述看,貌似问题是主进程停顿,而不是用不用sleep(). 如果不想使主进程停顿,且进行每两秒一次的循环(操作A),那操作A应该放到后台执行,即使用单独的线程执行操作A, 如果需要与主进程进行交换,就用委托及事件处理即可, 另外,你的马甲好多呦
gg606
2012-03-30
打赏
举报
回复
是不是可以开个线程,把循环放在线程里,还是用sleep(2000)
向立天
2012-03-30
打赏
举报
回复
sleep是最好的方法了
为什么不用
加载更多回复(7)
Java 为什么不推荐在 while 循环中使用
sleep
() 我悟了
最近逛 CSDN 看到一篇文章,文章大意是说为什么在循环中不推荐使用
sleep
操作,原因在于线程
挂起
和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService 方案进行优化,下面我简单复现一下具体代码,大家思考一下,原文的原因以及解决方案是否合理:
shell编程(十二)
while循环
一
while循环
的应用场景
while循环
工作中使用的不多,一般是守护进程程序或始终循环执行场景,其它循环计算,都会用for替换while 二
while循环
的类型 当型(while)和直到(until)型循环语句 1、while条件句 while 条件 do 指令 … done # 先判断条件(满足)--->执行--->判断...
linux脚本编程while,shell脚本编程学习之路-
while循环
1.当型循环和直到型循环
while循环
使用的不多,一般守护进程程序或始终循环执行会用到,其他循环运算都用for循环代替。1.1 当型和直到型循环语法(1)while条件语句while do指令….done
while循环
执行流程对应的逻辑图如图1-1所示:(2)until条件语句until do指令…Done提示:只循环一次,应用场景不多,了解就好。1.2 当型和直到型循环基本范例执行
挂起
一段时间:...
shell学习二十四--
while循环
一、当型循环和直到型循环 当型循环结构:在每次执行循环体前,对条件进行判断,当条件满足时,执行循环体,否则终止循环。 直到型循环结构:在执行了一次循环体后,对条件进行判断,如果条件不满,就继续执行,知道条件满足终止循环。 Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式, 有三种常用的循环语句:for、while和until。
while循环
和for循环属于“当型
Sleep
(0)的妙用
Thread.
Sleep
(0) 表示
挂起
0毫秒,你可能觉得没作用,你要写Thread.
Sleep
(1000) 就有感觉了。似乎毫无意义。 MSDN的说明:指定零 (0) 以指示应
挂起
此线程以使其他等待线程能够执行。 Thread.
Sleep
(0) 并非是真的要线程
挂起
0毫秒,意义在于这次调用Thread.
Sleep
(0)的当前线程确实的被冻结了一下,让其他线程有机会优先执行。Threa
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章