今天本来想偷个懒,直接拿demo的一个chat代码做一个监控服务程序。采用的是传统的CSocket和CArchive方式处理序列化消息发送既可以了。
在做的途中,觉得搞一个线程处理读一个list字符串,有字符串就调用CSocket继承类,通过序列化方法发送出去就可以了。
结果修改运行后,却本来想偷懒却变出偷不了懒,在通过序列化方式发送老是报一个Sockcore.cpp中的566的ASSERT错误。
#ifdef _DEBUG
void CAsyncSocket::AssertValid() const
{
CObject::AssertValid();
ASSERT(m_hSocket == INVALID_SOCKET || CAsyncSocket::FromHandle(m_hSocket) != NULL);
}
仔细看这个ASSERT,就是报socket的问题。
程序反复看了看,也没有查出问题。在google搜了搜,
http://topic.csdn.net/t/20020521/20/741527.html
http://topic.csdn.net/t/20020626/12/830990.html
从中有些启发,把send部分从线程中采用主线程发送,立马解决问题。看来CSocket的继承类是估计不支持在线程模式下运行。也有人说CSocket继承类只能用于主线程,而不能在线程中,当然,是否这样,还需要确认。不过,如果想写线程下的socket类,最好还是从socket构造吧,免得绕弯路。否则,调试来调试去,困惑在深深的MFC代码内核代码中简直是浪费时间。