Sleep()的迷惑??

xabcxabc2005 2006-08-09 01:48:33
1:
在一个单文档程序中.添加一个菜单项目.Sleep,(IDM_SLEEP),在其响应中添加
{
Sleep(6000);//延迟六秒
}

运行:
点击中,执行Sleep(6000);则在这6秒中,程序好像死机一样,对别的鼠标点击无任何反映.
而孙鑫讲课时说,当主线程Sleep(4000);的这4秒中,CPU执行另外一个线程,程序如下:

#include <windows.h>
#include <iostream.h>

DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);

int index=0;
int tickets=0;

void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
CloseHandle(hThread1);
// Sleep(4000);
cout<<"main thread is running"<<endl;
}

DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(index++<3)
cout<<"thread1 is running"<<endl;
return 0;

}

运行结果
1:无Sleep(4000)时:
main thread is running.
2:有Sleep(4000)时:
thread1 is running
thread1 is running
thread1 is running
main thread is running
这个Sleep(4000)中,可以处理线程1.
而下面:
在一个单文档程序中.添加一个菜单项目.Sleep,(IDM_SLEEP),在其响应中添加
{
Sleep(6000);//延迟六秒
}
为何不行呢,在Sleep(6000)中找个6秒,这个程序好像死机一样,不能响应任何鼠标点击?
孙鑫讲课时说,当主线程Sleep(4000);的这4秒中,CPU执行另外一个线程.

两者似乎有矛盾?这是为什么呢?
...全文
196 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqk 2006-08-10
  • 打赏
  • 举报
回复
你把主线程阻塞了,而且主线程是负责界面的UI线程,其它工作线程的工作是正常的,你可以用TRACE() 来打印出来调试信息。
xinzhou-nk 2006-08-09
  • 打赏
  • 举报
回复
不矛盾
你的Sleep阻塞的是MFC的UI处理线程,当然所有的消息循环都停止不再响应了。
dp_computer 2006-08-09
  • 打赏
  • 举报
回复
对,现象就是这样的,阻塞的是当前的线程(如楼上)所说的。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧