CAsyncSocket类如何在工作线程中调用

acrobatyuer 2010-07-08 11:38:22
CAsyncSocket类的OnConnect必须要在界面线程中调用Connect时才能有效的被调用到,但是新创建一个工作线程就无法响应该消息;有没有什么办法可以在工作线程中调用CAsyncSocket的Connect方法啊!~~~

我之前在工作线程中加入了消息循环就可以在工作线程中正常响应OnConnect了,不过这样一来工作线程就无法退出啦!

我要做的是一个阻塞的SOCKET连接,为了避免影响到界面显示,需要在线程中去连接。主要是为了不影响界面无响应,不知各位有没有什么其它的方法可以借鉴一下,小弟在这里谢过了。
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2010-07-08
  • 打赏
  • 举报
回复
在工作线程中Create一个Hide的窗口,就是UI线程,它也是这么做的。
雪影 2010-07-08
  • 打赏
  • 举报
回复
找到问题就好,慢慢调试总会有办法的
acrobatyuer 2010-07-08
  • 打赏
  • 举报
回复
哦!不好意思,我弄错了,是个非阻塞的SOCKET连接,同事给提供了一个接口,这个接口内部去连接的,是他的这个接口阻塞。。。

结果我在工作线程里面调用他的这个接口时CAsyncSocket的OnConnect方法就调不到啦!后来我试着在线程的最后加上了消息循环,就能调到OnConnect方法了。不过好像没有办法在这里面加个消息循环,一个是退出有问题,另一个就是在这里加消息循环总是出现一些其它界面崩溃的问题。
雪影 2010-07-08
  • 打赏
  • 举报
回复
UI线程中使用非阻塞Socket不是挺好的嘛

在Socket连接成功之后应该可以获取到一个连接成功的消息,然后会调用OnConnect函数
acrobatyuer 2010-07-08
  • 打赏
  • 举报
回复
这个还有其它的办法吗???

现在不是由我决定用什么的,只能用CAsyncSocket,我也没有办法,我还不想用MFC的连接呢!

但是不能啊!
kemee 2010-07-08
  • 打赏
  • 举报
回复
阻塞的SOCKET连接你用CAsyncSocket做什么。。。不是用CSocket更好么。。。

定义一个全局变量m_exit这样就可以了
	
while(!m_exit)
{

if(!aSocket.Accept(serverSocket))
{
continue;
}
else
{

}

}
aSocket.Close();
oyljerry 2010-07-08
  • 打赏
  • 举报
回复
工作线程中加了消息循环,可以再加一个退出标志等,当要退出的时候,标志置位,然后消息循环结束,线程就可以退出了

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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