VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 748|回复: 2

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

[复制链接]

2

主题

16

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-2-7 12:30:01 | 显示全部楼层 |阅读模式
在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类是否对其生成线程有依赖关系?
回复

使用道具 举报

0

主题

36

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-4-17 10:30:01 | 显示全部楼层
MFC objects are thread specifical, you need to do Detach/Attach, you can find more detail in the following post.
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-4 13:15:01 | 显示全部楼层
CSocket是非线程安全的,它必须依赖于一个窗口主线程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表