我正在编写一个多线程网络应用程序,并且我正在使用一个带有阻塞套接字的单独线程来从服务器异步接收数据。
当我需要关闭套接字时,我使用一个函数来检查接收线程是否仍在运行以及是否调用TerminateThread
它来结束它,如下所示:
DWORD dwExitCode = 0;
if( GetExitCodeThread( theApp.m_hRecvThread, &dwExitCode ) && dwExitCode == STILL_ACTIVE )
TerminateThread( theApp.m_hRecvThread, 0 );
但是,GetExitCodeThread
返回FALSE
,并且在轮询GetLastError()
时返回 6 ( ERROR_INVALID_HANDLE
)。这表明我在句柄上没有THREAD_QUERY_INFORMATION
或THREAD_QUERY_LIMITED_INFORMATION
访问权限。m_hRecvThread
我的m_hRecvThread
句柄是在创建线程时设置的,如下所示:
m_hRecvThread = AfxBeginThread( RecvThread, hWndMainFrame );
这成功地创建了线程,并且线程运行良好并展示了预期的功能。TerminateThread
和GetExitCodeThread
是从最初创建 Receive 线程的同一线程调用的。
我的理解是,使用时
AfxBeginThread
,HANDLE
返回的有THREAD_ALL_ACCESS
访问权限,是这样吗,如果是这样,为什么我仍然得到ERROR_INVALID_HANDLE
?
提前致谢!