CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

如何触发线程结束事件?

楼主Researcher(游戏人)2005-04-03 09:29:08 在 VC/MFC / 进程/线程/DLL 提问

我在Vc6.0里编写了一个Win32应用程序,该程序用如下方式调用一个ThinkProc线程  
  m_hHandle=::CreateThread(0,0,ThinkProc,NULL,0,&m_dwThreadID);  
  编译已通过。  
  但碰到两个问题  
  1.如何触发线程结束事件,要线程结束时才运行一段程序?  
  2.线程中有一处OpenGL语句glSwapBuffer();用于屏幕显示线程运行的中间数据结果。  
      但加了这一句程序运行时就会出错,注释掉这一句就好了,而这一句又是必须的,不知如何解决?  
      (注意如果不用线程整个程序包括glSwapBuffer()都是可以正常运行的!)  
      (运行错误时出现一个红叉叉警告框说是"0x695751c8指令引用的0x00000080内存不能读") 问题点数:0、回复次数:22Top

1 楼Hendy_So(横笛)回复于 2005-04-03 10:15:32 得分 0

1、设一个线程退出标志。事件,消息,变量通知都可以。  
  2、opengl中好像没有glSwapBuffer函数吧,试试Windows的函数SwapBuffersTop

2 楼Researcher(游戏人)回复于 2005-04-03 10:37:19 得分 0

我不是问怎样退出线程(这个我知道),而是想知道怎样在线程结束时才运行一段程序。(这段程序不是在线程里)。谢谢!Top

3 楼Hendy_So(横笛)回复于 2005-04-03 10:46:55 得分 0

还是一个同步问题,线程退出时你可以激活事件,发送消息。Top

4 楼xuzheng318(忧郁王子)回复于 2005-04-03 10:50:40 得分 0

The   SwapBuffers   function   exchanges   the   front   and   back   buffers   if   the   current   pixel   format   for   the   window   referenced   by   the   specified   device   context   includes   a   back   buffer.    
   
  BOOL   SwapBuffers(  
      HDC     hdc     //   device   context   whose   buffers   get   swapped  
  );  
  Top

5 楼Researcher(游戏人)回复于 2005-04-03 11:01:29 得分 0

请问怎样激活事件,发送消息?谢谢!Top

6 楼laiyiling(陌生人[MVP])回复于 2005-04-03 19:28:40 得分 0

HANDLE   hThread   =   CreateThread(...);  
  //   等待创建的线程退出  
  WaitForSingleObject(   hThread,   INFINITE   );   //利用这个函数就能在线程结束后再执行后面的语句  
  .....Top

7 楼laiyiling(陌生人[MVP])回复于 2005-04-03 19:29:49 得分 0

http://community.csdn.net/Expert/topic/3564/3564323.xml?temp=.4923975Top

8 楼cut9(切瓜玩)回复于 2005-04-03 19:46:24 得分 0

PostThreadMessage,   消息   WM_QUITTop

9 楼gyj_china(透明)回复于 2005-04-03 19:51:59 得分 0

WaitForSingleObject(   hThread,   INFINITE   );  
  ....  
  线程结束后的代码  
  Top

10 楼microgiant(技术已死,有事烧纸)回复于 2005-04-04 09:38:08 得分 0

一个是WaitSingleObject,或者是WaitForMultiobjects,再或者是PostThreadMessageTop

11 楼vcleaner(我没当大哥很久了.......)回复于 2005-04-04 09:42:28 得分 0

WaitSingleObjectTop

12 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-04 10:24:45 得分 0

WaitSingleObject等待线程handle结束Top

13 楼somexing(somexing)回复于 2005-04-04 12:51:31 得分 0

看看glSwapBuffer()是如何实现的。  
   
  估计thread中间有内存释放过程,然后再free就出错了Top

14 楼Researcher(游戏人)回复于 2005-04-05 10:59:54 得分 0

在执行WaitSingleObject等待线程handle结束时,调用线程的窗口是否会锁定?如果是,那还用现成干什么呢?Top

15 楼Researcher(游戏人)回复于 2005-04-05 11:38:24 得分 0

线程函数ThinkProc()耗时的一般要等20秒左右。我想在这段时间内窗口仍然要能激活。用户可以对窗口进行各种操作。如果执行WaitSingleObject等待线程handle结束,窗口就不能激活,效果和不用线程一样了。  
   
  线程结束时执行的代码很快,用于显示线程计算结果。  
   
  PostThreadMessage到底怎么用啊?有例程吗?  
  用PostMessage可以吗?Top

16 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-05 12:11:57 得分 0

可以把WaitSingleObject放到另一个线程中Top

17 楼Researcher(游戏人)回复于 2005-04-05 17:20:32 得分 0

PostThreadMessage和PostMessage有什么区别。我这种情况用哪一个好?  
  还是采用oyljerry(【勇敢的心]的方案比较好?Top

18 楼Researcher(游戏人)回复于 2005-05-29 20:31:02 得分 0

Sorry!我线程里用的就是Windows的函数SwapBuffers();一加入此行就出错:注掉//后就好了,但是我看不见线程中绘制的三维图形.  
  运行错误时出现一个红叉叉警告框说是"0x695751c8指令引用的0x00000080内存不能读  
   
  但是SwapBuffers();在非线程的程序中是可以正常运行的.  
  我摸了很久都解决不了这个问题.Top

19 楼ww51xh(月亮被水淹了)回复于 2005-05-30 10:43:05 得分 0

使用PostMessage更好一点吧,这样的话,别外一边的程序就用不着停止在那试等待线程结束了Top

20 楼Researcher(游戏人)回复于 2005-05-31 11:15:53 得分 0

线程里是不是不能调用像SwapBuffers();这样的函数?那我要在线程中绘制的三维图形怎么办呢?Top

21 楼senses1(senses1)回复于 2005-05-31 11:31:41 得分 0

学习Top

22 楼Researcher(游戏人)回复于 2005-06-09 11:50:39 得分 0

线程里到底能否调用像SwapBuffers();这样的函数?  
  怎样解决此问题,先谢了!Top

相关问题

  • 多线程触发事件的问题
  • 线程切换的时候触发了什么事件?
  • 在线程中动态生成的ClientSocket不触发OnConnect和OnRead事件,怎么办?
  • Timer 控件触发的事件应该是在独立的线程里运行的吧?
  • X掉浏览器触发一个事件:关掉一个server端轮询的线程
  • c#中有没类似SendMessage用法的函数(主要想在线程中触发事件)
  • 事件触发
  • ASP.NET应用程序结束前触发的事件
  • 从线程外部结束线程
  • 父线程怎样结束子线程?

关键词

  • 线程
  • 函数
  • 执行
  • 内存
  • 解决
  • 消息
  • swapbuffers
  • glswapbuffer
  • 结束
  • 运行

得分解答快速导航

  • 帖主:Researcher

相关链接

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

广告也精彩

反馈

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