多线程中,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是否还有效?
展开
 我来答
zhccsd
2014-08-05 · TA获得超过4042个赞
知道大有可为答主
回答量:1347
采纳率:66%
帮助的人:921万
展开全部
一个很简单的方法是用互斥对象
线程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对象的状态吗?
追答
直接操作另一线程中局部变量比较困难,就算能实现也不是很科学
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式