CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

一个线程开始时间的问题(谢谢)

楼主zkoperater(zkoperater)2003-09-03 15:56:14 在 VC/MFC / 进程/线程/DLL 提问

有一个基于对话框的工程,对话框上有一个按钮,在按钮响应函数里开始  
  一个线程,如下:  
  UINT   ThreadProc(LPVOID   param)  
  {  
      CDialogFloat   dlg;//在其他文件定义的对话框。  
      dlg.DoModal();  
      return   0;}  
  void   CShiyan01Dlg::OnButton1()    
  {  
      AfxBeginThread(ThreadProc,NULL,THREAD_PRIORITY_ABOVE_NORMAL);  
      Sleep(3000);}  
  结果我发现必须要等到sleep三秒钟后,那个模式对话框才能出来,为什么呢? 问题点数:60、回复次数:6Top

1 楼zkoperater(zkoperater)回复于 2003-09-04 16:40:35 得分 0

谁帮帮   我呀  
  ?谢了Top

2 楼lshadow(没车没房努力中。。。)回复于 2003-09-04 17:01:49 得分 3

换成非模式的试一试Top

3 楼wuchuncai(1234567)回复于 2003-09-04 17:34:00 得分 3

子线程响应慢Top

4 楼whoo(谁)回复于 2003-09-05 03:01:24 得分 20

sleep   会使线程休眠。休眠的线程不会进行任何处理,包括消息(对于界面线程来说,这又不是一件好事)。  
   
  但是创建window的时候又会有各种的消息发送、广播。如果一些消息被sleep暂停的话,创建的window只好等待。  
   
   
   
  Top

5 楼whoo(谁)回复于 2003-09-05 03:16:57 得分 20

跟踪DoModal()可以发现在  
  ::EnableWindow(hWndParent,   FALSE);  
  处发生了线程切换。  
   
  很显然DoModal需要hWndParent对WM_CANCELMODE消息作出反应,如果hWndParent不理不睬的话,DoModal就只好等下去了。Top

6 楼whoo(谁)回复于 2003-09-05 03:19:14 得分 14

其实即使不用Sleep也一样,因为Dialog必须等待该函数返回才能处理下一个消息。所以用这种方法创建的window只能在函数结束后才会出现。Top

相关问题

  • 进程,线程,时间片
  • 如何知道多线程程序中每个线程的运行时间
  • win2k/xp多线程编程中,线程时间片可以不同吧?
  • 在线程中怎么让它停一须时间啊?
  • 求: 线程安全的日期时间函数
  • 求助:怎样进行线程时间计算
  • 可知每个线程的时间片是多少?
  • 谁能讲解,线程switch的时间,规则等等
  • 如何在一个线程内延时一段时间
  • 百分求救关于多线程时间片的问题

关键词

  • 线程
  • 函数
  • sleep
  • 消息
  • 对话框
  • domodal
  • hwndparent
  • dlg
  • 创建

得分解答快速导航

  • 帖主:zkoperater
  • lshadow
  • wuchuncai
  • whoo
  • whoo
  • whoo

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo