kenlistian

厚积薄发. 勤为桨,思为帆

   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  73 随笔 :: 4 文章 :: 22 评论 :: 0 Trackbacks

    今天本来想偷个懒,直接拿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代码内核代码中简直是浪费时间。

posted on 2008-02-18 20:18 kenlistian 阅读(1427) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理