控制台程序:
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()之类的语句才
开始处理线程的代码?

解决方案 »

  1.   

    第一个问题:在对话框程序中,只要把下面这段代码删除就可以了:
    while(1)
    {
    Sleep(100);//将CPU控制权交给其他线程
    }第二个问题:
    新线程什么时候执行,并没有一个固定的时候,也没有办法预测。不要去猜想它什么时候开始运行,也不能跟据几次观察的结果就断定它是什么时候运行的。
      

  2.   

    上面的“跟据”要改为“根据”。
    几乎每次发帖,都忍不住要说一次:CSDN不能修改帖子,真是太不方便了。
      

  3.   

    楼主对 Windows 消息完全不理解,对线程也不理解。void mydlg::OnButton1() 这个函数不退出,界面线程无法处理其他消息(在那阻塞呢!),你用向导新建一个 Win32 Application ,看看消息循环就知道了。还有尽量不要用 Sleep ,可以用 WaitForSingleObject 。