控制台程序:
void main()
{
CreateNewThread(TRUE);//建立一个新的线程
char ch;
while(1)
{
printf("测试,按Q键退出");
ch = _getch();//如果没有用户输入,就将CPU控制权交给其他线程
case 'Q':
goto out_exit;
return nRetCode;
}
}
上面的程序CPU占用率很低,程序运行也很正常,改成对话框程序,在一个BUTTON事件中:
void mydlg::OnButton1()
{
CreateNewThread(TRUE);//建立一个新的线程
while(1)
{
Sleep(100);//将CPU控制权交给其他线程
}}
这个做法是CPU占用率也不高,按钮按下后应用程序在工作,但是对话框没有响应,鼠标一直是漏斗状
我有两个问题:
1、为什么在控制台下那样的做法把CPU的控制权交给建立的线程是可以的,而对话框程序不行,对话
框程序要实现控制台那样的效果该怎么做?
2、为什么新建的线程CreateNewThread(TRUE)没有立即运行,而是要等到ch = _getch()之类的语句才
开始处理线程的代码?
void main()
{
CreateNewThread(TRUE);//建立一个新的线程
char ch;
while(1)
{
printf("测试,按Q键退出");
ch = _getch();//如果没有用户输入,就将CPU控制权交给其他线程
case 'Q':
goto out_exit;
return nRetCode;
}
}
上面的程序CPU占用率很低,程序运行也很正常,改成对话框程序,在一个BUTTON事件中:
void mydlg::OnButton1()
{
CreateNewThread(TRUE);//建立一个新的线程
while(1)
{
Sleep(100);//将CPU控制权交给其他线程
}}
这个做法是CPU占用率也不高,按钮按下后应用程序在工作,但是对话框没有响应,鼠标一直是漏斗状
我有两个问题:
1、为什么在控制台下那样的做法把CPU的控制权交给建立的线程是可以的,而对话框程序不行,对话
框程序要实现控制台那样的效果该怎么做?
2、为什么新建的线程CreateNewThread(TRUE)没有立即运行,而是要等到ch = _getch()之类的语句才
开始处理线程的代码?
while(1)
{
Sleep(100);//将CPU控制权交给其他线程
}第二个问题:
新线程什么时候执行,并没有一个固定的时候,也没有办法预测。不要去猜想它什么时候开始运行,也不能跟据几次观察的结果就断定它是什么时候运行的。
几乎每次发帖,都忍不住要说一次:CSDN不能修改帖子,真是太不方便了。