我想在一个主线程中终止另一个正在运行线程,应该怎么解决?
在网上查了很多资料,都说的不清楚,有些说的还是错的。希望高手解答。
我使用过GetCurrentThread()获得需要终止运行的线程的句柄,然后在主线程中使用TerminateThread()终止它,结果好像是把主线程终止了(界面没有了)。查msdn ,它说需要使用DuplicateHandle。有没有什么好的方法?还是我使用TerminateThread的方法不对?
谢谢高手指点!
在网上查了很多资料,都说的不清楚,有些说的还是错的。希望高手解答。
我使用过GetCurrentThread()获得需要终止运行的线程的句柄,然后在主线程中使用TerminateThread()终止它,结果好像是把主线程终止了(界面没有了)。查msdn ,它说需要使用DuplicateHandle。有没有什么好的方法?还是我使用TerminateThread的方法不对?
谢谢高手指点!
解决方案 »
- 问一下初级的问题,在3D开发中,顶点坐标的1.0f 到底相当于屏幕的多少像素?我设置了5.0f 都很宽了
- 基于对话框的dll运行时任务栏显示的icon怎么改
- 刚毕业,老板就安排任务,大部分是自己完成,各位给个建议
- 高分求助,MFC网络编程问题,代码不长!
- 自己做的程序员用的小工具,拿出来给大家献丑了。
- 请问,大家都用VC6做什么啊
- MFC 对话框的问题
- 怎样在SQL2000数据库中存储图片
- 请问谁有2003 10月的高程考试试题和答案发给我?
- 用组件可以设计出框架结构吗?
- 有两个线程:WorkerFunction 和ttproc,变量是在ttproc里声明,如何在另一个线程WorkerFunction 里调用?
- 在dialog里创建一个新的线程,我怎么样才能用该dialog类里的成员函数和成员变量.
从字段意思理解应该知道GetCurrentThread是获取当前线程,在主线程中获取得的HANDLE是主线程的,
我在几个地方都放过,但结果是一样的,主界面没有了。
The function cannot be used by one thread to create a handle that can be used by other threads to refer to the first thread. The handle is always interpreted as referring to the thread that is using it.
意思是说,如果你在哪个线程中使用它,它就会被解释成哪个线程的句柄。那么是不是说,如果我在主线程中使用在需要终止的线程中获得的句柄,它就会被自动解释成主线程的句柄???
但是,网上又有人说可以在一个线程中使用GetCurrentThread,然后在另一个线程中使用TerminateThread()终止它? 到底对还是错?问题应该怎么解决?
我在创建线程的时候使用的是AfxBeginThread,返回的是CWinThread *m_pThread.没有HANDLE或id,如果使用GetCurrentThread()不行的话,我应该怎么获得?
谢谢!
CWinThread::m_nThreadID 线程ID
要用TerminateThread(),必须有线程句柄,我已经获得了CWinThread *m_pThread,通过m_pThread->m_hThread可以很容易获得句柄。
但是现在的问题是:
我终止了正在运行的那个线程后,再一次想开启那个线程(仍然调用AfxBeginThread),却无法启动那个线程?我应该怎么办?
请高手指点!
然后你Sleep一下,如果那个线程还不退出,再使用TerminateThread()。
另外,不能用GetCurrentThread(),要用GetCurrentThreadId。
我用了CEvent和WaitSingleObject,可以很好的让线程自然结束。
谢谢大家!