首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为什么小弟我的通信线程不能使用主线程的CSokcet全局变量

2012-01-31 
为什么我的通信线程不能使用主线程的CSokcet全局变量在CMyDialog中:CSocketm_pSocketCMyThreadm_pThread

为什么我的通信线程不能使用主线程的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是非线程安全的,它必须依赖于一个窗口主线程

热点排行