如何触发线程结束事件?
我在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




