一个看似简单却迷惑的有关问题
一个看似简单却迷惑的问题。
各位,我编写了个测试while循环的小程序,代码如下
产生exe运行后,在任务管理器中查看,就是无响应了,把鼠标移至应用程序的界面上,鼠标呈现漏斗状(忙碌中),而且产生了两个应用程序(我只开了一个exe且只点了一下TEST),如图:
请问各位,这是什么原因呢?这样属于死循环的范畴吗?怎样才能避免呢?
------解决方案--------------------
希望都是明示,没有暗示
------解决方案--------------------
各位,我编写了个测试while循环的小程序,代码如下
void CTest_WhileDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int i=1;
while (i<10000)
{
i=i+1;
Sleep(100);
}
}
产生exe运行后,在任务管理器中查看,就是无响应了,把鼠标移至应用程序的界面上,鼠标呈现漏斗状(忙碌中),而且产生了两个应用程序(我只开了一个exe且只点了一下TEST),如图:
请问各位,这是什么原因呢?这样属于死循环的范畴吗?怎样才能避免呢?
------解决方案--------------------
希望都是明示,没有暗示
//只是一个简单fix, 自己改进
bool shutdown = false;
unsigned int __stdcall ThreadFun(PVOID pM)
{
int i=1;
while (!shutdown && i<10000)
{
i=i+1;
Sleep(100);
}
AfxMessageBox("执行完毕");
return 0;
}
void CTest_WhileDlg::OnButton1()
{
HANDLE handle=(HANDLE)_beginthreadex(NULL,0,ThreadFun,NULL,0,NULL);
CloseHandle(handle); //不要等待,也不要循环,只是简单的调度一下
}
//新加一个按钮,在关闭程序前, 关闭子线程
void CTest_WhileDlg::OnButton2()
{
shutdown = true;
}
------解决方案--------------------
void CTest_WhileDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int i=1;
MSG msg;
while (i<10000)
{
i=i+1;
Sleep(100);
if (0==i%10)
if (GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}