多线程中,MFC,如何在线程2中判断线程1中的CSocket s;s是否是已经执行了s.Close();?
多线程中,MFC,如何在线程2中判断线程1中的CSockets;s是否是已经执行了s.Close();?线程2中有s的指针ps。如果线程1中执行了s.Close();线程...
多线程中,MFC,如何在线程2中判断线程1中的CSocket s;s是否是已经执行了s.Close();?线程2中有s的指针ps。
如果线程1中执行了s.Close();线程2中执行ps->IsBlocking()就出错。
如果线程1中未执行s.Close();线程2中执行ps->IsBlocking()不会出错。
如何判断线程1中s是否还有效? 展开
如果线程1中执行了s.Close();线程2中执行ps->IsBlocking()就出错。
如果线程1中未执行s.Close();线程2中执行ps->IsBlocking()不会出错。
如何判断线程1中s是否还有效? 展开
1个回答
展开全部
一个很简单的方法是用互斥对象
线程1中先创建互斥对象
HANDLE hMe = CreateMutex( 0 , FALSE, TEXT("MY_MUTEX_S_CLOSE") );
执行Close()的时候顺便关闭这个互斥对象CloseHandle
然后2线程中执行:
HANDLE hMe = CreateMutex( 0 , FALSE, TEXT("MY_MUTEX_S_CLOSE") );
if( ERROR_ALREADY_EXISTS == GetLastError() )
{
//还没有执行 Close()
}
if(hMe) CloseHandle(hMe);
另外还有事件对象等,都很适合用来跨线程,跨进程判断某个开关状态
线程1中先创建互斥对象
HANDLE hMe = CreateMutex( 0 , FALSE, TEXT("MY_MUTEX_S_CLOSE") );
执行Close()的时候顺便关闭这个互斥对象CloseHandle
然后2线程中执行:
HANDLE hMe = CreateMutex( 0 , FALSE, TEXT("MY_MUTEX_S_CLOSE") );
if( ERROR_ALREADY_EXISTS == GetLastError() )
{
//还没有执行 Close()
}
if(hMe) CloseHandle(hMe);
另外还有事件对象等,都很适合用来跨线程,跨进程判断某个开关状态
更多追问追答
追问
没办法判断CSocket对象的状态吗?
追答
直接操作另一线程中局部变量比较困难,就算能实现也不是很科学
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询