请问WaitForSingleObject如何等待Thread?

gpmn 2003-07-29 04:36:10
WaitForSingleObject(hThread/*某个线程的句柄*/,INFINITE)可以吗?
hThread代表的线程如果在运行,就要一直等下去,直到线程退出来吗?
如果是这样,就是说我等到的时候,线程已经退出了?我还需要调用类似于ReleaseSemaphore、对hThread做类似处理的某个(??)函数吗?什么函数?

比如:
CWinThread *pThread=AfxBeginThread(......);


WaitForSingleObject(pThread->m_hThread,INFINITE);
正确否?
...全文
2345 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyong7887 2003-08-08
  • 打赏
  • 举报
回复
up
gpmn 2003-07-30
  • 打赏
  • 举报
回复
各位请回答我的最后的问题,不要跑题了:
1、用WaitForSingleObject(hThread,INFINITE)等到的线程句柄,是不是需要CloseHandle()?
2、如果没用WaitForSingleObject(...),应该就是不管就可以了吧?
第二个问题只是确认一下,应该就是这样,第一个问题比较疑惑,请指正!
javence 2003-07-30
  • 打赏
  • 举报
回复
老兄,我感觉最好别用函数推出线程。
Pipi0714 2003-07-30
  • 打赏
  • 举报
回复
它大多在你的线程函数钟调用等待退出事件的激活然后用AfxEndThread退出线程
gpmn 2003-07-30
  • 打赏
  • 举报
回复
/*
回复人: wbinsh(vc++) ( ) 信誉:100 2003-07-29 17:28:00 得分:0

有没有用你都要CloseHandle.
*/
没有Wait过不用CloseHandle()吧,不能理解;难道我一开线程就要自己去CloseHandle();
你不Wait你怎么知道什么时候去Close?总不至于没事去Wait吧?这个回答难以服众;

bager(柏哥) 给个标准答案把?
oygy 2003-07-30
  • 打赏
  • 举报
回复
1,如果你是用AfxBeginThread()来创建线程的,你应该在线程函数中用AfxEndThread来结束掉该线程; 如果你是用CreateThread()或_beginthread()创建的,那么可以用CloseHandle来关闭线程句柄。
2,同1, 而与等待函数无关。
gpmn 2003-07-30
  • 打赏
  • 举报
回复
终于搞懂了,谢谢各位!一直还不知道呢,见笑了
下面是我翻的msdn;
CloseHandle invalidates the specified object handle, decrements the object's handle count, and performs object retention checks. After the last handle to an object is closed, the object is removed from the system.

Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, then close all handles to the thread.
........
The thread object remains in the system until the thread has terminated and all handles to it have been closed through a call to CloseHandle.

ajn_sailing 2003-07-30
  • 打赏
  • 举报
回复
是否需要CloseHandle()和WaitForSingleObject(hThread,INFINITE)没有关系。WaitForSingleObject只是起了一个查询的作用,和资源回收没有关系的,所以都应该CloseHandle.

但你用了一个封装的线程类,在线程结束时,类里面的析构函数会自动释放资源的,可以不用closehandle.
wbinsh 2003-07-29
  • 打赏
  • 举报
回复
有没有用你都要CloseHandle.
gpmn 2003-07-29
  • 打赏
  • 举报
回复
如果没有用WaitForSingleObject(hThread,INFINITE);
是不是就可以不用CloseHandle,线程退出后应该就不用管了吧?
FAICHEN 2003-07-29
  • 打赏
  • 举报
回复
getexitcodethread()
来判断是否退出
bager 2003-07-29
  • 打赏
  • 举报
回复
>>WaitForSingleObject(hThread/*某个线程的句柄*/,INFINITE)可以吗?
线程的句柄在WIN32中可以作为信号量使用。当线程结束时,其状态由非信号状态转变为信号状态。可以使用WaitForSingleObject函数来等线程对象。

>>hThread代表的线程如果在运行,就要一直等下去,直到线程退出来吗?
是否一直等下去,取决于第二个参数传入的内容。如下所示:
INFINITE:像你所使用的那样传入此参数,此函数会一直等待下去。
0 :函数检测对象状态并立即返回
>0 :如果超出等待时间,线程仍然处于非信号状态,将返回WAIT_TIMEOUT

>>如果是这样,就是说我等到的时候,线程已经退出了?我还需要调用类似于>>ReleaseSemaphore、对hThread做类似处理的某个(??)函数吗?什么函数?
如果没有其它与此线程相关的资源需要回收,关闭线程句柄就行了。
BOOL CloseHandle(
HANDLE hObject // handle to object
);

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧