读书人

为什么小弟我的通信线程不能使用主线程

发布时间: 2012-01-31 21:28:41 作者: rapoo

为什么我的通信线程不能使用主线程的CSokcet全局变量
在CMyDialog中:
CSocket m_pSocket;
CMyThread m_pThread;

在CMyDialog::InitDialog()中

m_pSocket=new CSocket();
m_pSocket-> Create(MYPORT);
...Socket 的生成是完全没有问题的

m_pThread=AfxBeginThread(RUNTIME_CLASS(CMyThread)); Thread的建立也完全没有问题

在CMyDialog::OnMyButtonClick()中
m_pThread-> PostThreadMessage(MYMESSAGE);

在CMyThread消息循环中:

case MYMESSAGE:
(这是在Thread初始化时生成的CMyDlg类全局变量)
m_pDlg-> RecvData();

之前的所有过程都没有问题:
但在m_pThread执行CMyDlg::RecvData()时
CMyDlg::RecvData(){
m_pSocket-> send(...)这里的m_pSocket==0,而不经过线程直接用this-> RecvData()的话没有任何问题,为什么?
CSocket类是否对其生成线程有依赖关系?


[解决办法]
MFC objects are thread specifical, you need to do Detach/Attach, you can find more detail in the following post.
http://www.codeproject.com/cpp/AttachDetachObj.asp
Attaching and Detaching Objects
[解决办法]
CSocket是非线程安全的,它必须依赖于一个窗口主线程

读书人网 >VC/MFC

热点推荐