今天本來想偷個懶,直接拿demo的一個chat代碼做一個監(jiān)控服務(wù)程序。采用的是傳統(tǒng)的CSocket和CArchive方式處理序列化消息發(fā)送既可以了。
在做的途中,覺得搞一個線程處理讀一個list字符串,有字符串就調(diào)用CSocket繼承類,通過序列化方法發(fā)送出去就可以了。
結(jié)果修改運行后,卻本來想偷懶卻變出偷不了懶,在通過序列化方式發(fā)送老是報一個Sockcore.cpp中的566的ASSERT錯誤。
#ifdef _DEBUG
void CAsyncSocket::AssertValid() const
{
CObject::AssertValid();
ASSERT(m_hSocket == INVALID_SOCKET || CAsyncSocket::FromHandle(m_hSocket) != NULL);
}
仔細(xì)看這個ASSERT,就是報socket的問題。
程序反復(fù)看了看,也沒有查出問題。在google搜了搜,
http://topic.csdn.net/t/20020521/20/741527.html
http://topic.csdn.net/t/20020626/12/830990.html
從中有些啟發(fā),把send部分從線程中采用主線程發(fā)送,立馬解決問題。看來CSocket的繼承類是估計不支持在線程模式下運行。也有人說CSocket繼承類只能用于主線程,而不能在線程中,當(dāng)然,是否這樣,還需要確認(rèn)。不過,如果想寫線程下的socket類,最好還是從socket構(gòu)造吧,免得繞彎路。否則,調(diào)試來調(diào)試去,困惑在深深的MFC代碼內(nèi)核代碼中簡直是浪費時間。