帖子没看明白。
1:DestoryWindow?该函数为WINAPI,是否为HOOK了该函数,还是应为响应WM_DESTROY消息的函数?
2:"线程中自己执行了ExitThread(),"?是SOCK辅线程吗?
3:MFC中好象不需主动CLOSEHANDLE,MFC帮你做了。
4:WaitForSingleObject(pMailThread->m_hThread, INFINITE)运行时进入过else括号中吗?
1:DestoryWindow?该函数为WINAPI,是否为HOOK了该函数,还是应为响应WM_DESTROY消息的函数?
2:"线程中自己执行了ExitThread(),"?是SOCK辅线程吗?
3:MFC中好象不需主动CLOSEHANDLE,MFC帮你做了。
4:WaitForSingleObject(pMailThread->m_hThread, INFINITE)运行时进入过else括号中吗?
解决方案 »
- tinyxml 如何显示 加密文本
- 如何在通过采集过来视频流实现录像功能,并且是一边显示实时视频,一边保存实时录像,保存的格式无所谓,但最好是压缩后的。
- 一个关于vs2005的弱智问题
- 头文件包含的问题
- VC+SYBASE中使用触发器怎么能不好用呢?求高手赐教了!
- 求助InstallShield 哪个版本支持vc6的安装
- 客户区刷新问题
- ★★★★有没有将16进制的字符串转换成无符号整形的函数?★★★★
- 怎样让我自己的Gina登陆对话框在安全模式下也能够使用?
- 我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请大家帮帮忙我在线等待 请
- 请问,我在局域网内用udp协议发送数据,每个包是否大小不能超过1k?
- 怎样在不包含头文件情况下,调用WebBrowser对象的所有的COM接口
1、DestoryWindow是在MainFrm中对WM_DESTROY消息的响应。
2、我在SOCKET线程(从CWinThread派生)的对WM_MSG_ACTION_STOP_THREAD消息的相应函数中
执行了ExitThread()。
3、CLOSEHANDLE是我自己看了一些东西瞎写的,病急了乱投医。
4、在WaitForSingleObject返回之前,程序就已经出错了。我想知道一般正常的情况下,对于这种多线程,应该采用什么方式可以安全的退出?
还有我这样做为何不能正常退出呢?
1:不要主动调EXITTHREAD,MFC帮你做了。
2:在UI线趁中关闭该线成是响应WM_QUIT消息,CWINTHREAD获得该消息会自动消掉线成。
这么写POSTTHREADMESSAGE(WM_QUIT),但一定要确定该消息辅线成收到。
3:在发消息WM_QUIT之前你发WM_MSG_ACTION_STOP_THREAD,在该消息响应函数里关闭你SOCK
资源,
4:用WaitForSingleObject(pMailThread->m_hThread, INFINITE)等待辅现成关闭,但注意主现成会挂起。
终止线程中的SOCK连接,没有回收sock资源。于是出现主线程被挂起,并且辅助线程一
直等待到SOCK连接超时之后,才返回。当然等它返回的时候它所在的线程都已经被我关
闭了。于是就出现异常错误。从你的回答中我想了想,正确的流程是不是应该是这样的:
1、首先主线程截获关闭主窗口的消息
2、主窗口发消息到SOCK辅助线程
3、SOCK线程接到消息,首先终止处于运行或等待状态的SOCKET连接
4、然后SOCK线程在收回SOCKET资源之后,在给自己发一个WM_QUIT消息,并改变某个信号量
5、主线程WaitForSingleObject返回,并删除指向该线程的指针。
6、主线程对下一个辅助线程操作...我想现在我仍然面对的问题就是:如何能实时的关闭正在运行的或者是出于等待状态下的
SOCKET连接。并且能收回所有资源,不出现内存泄漏?可否继续指教?谢谢!
终止线程中的SOCK连接,没有回收sock资源。于是出现主线程被挂起,并且辅助线程一
直等待到SOCK连接超时之后,才返回。当然等它返回的时候它所在的线程都已经被我关
闭了。于是就出现异常错误。从你的回答中我想了想,正确的流程是不是应该是这样的:
1、首先主线程截获关闭主窗口的消息
2、主窗口发消息到SOCK辅助线程
3、SOCK线程接到消息,首先终止处于运行或等待状态的SOCKET连接
4、然后SOCK线程在收回SOCKET资源之后,在给自己发一个WM_QUIT消息,并改变某个信号量
5、主线程WaitForSingleObject返回,并删除指向该线程的指针。
6、主线程对下一个辅助线程操作...我想现在我仍然面对的问题就是:如何能实时的关闭正在运行的或者是处于等待状态下的
SOCKET连接。并且能收回所有资源,不出现内存泄漏?可否继续指教?谢谢!
如果是非阻塞的,那需要先把socket的sendbuffer和recvbuffer清干净了再closesocket才退出子线程,再退出主线程。
就象FrankZhang123(FrankZhang123)说的,是否为堵塞模式?我估计你是堵塞模式。
该模式下函数未返回,消息堵死,你收不到WM_MSG_ACTION_STOP_THREAD,你一定要想办法让TCP堵塞函数返回,否则你只有TERMINATE你的辅线程。
我的线程在等待的时候好像也能收到消息,我在WM_MSG_ACTION_STOP_THREAD消息的
相应函数中的代码被执行了。