BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #88515同步于 2015/9/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

MFC多线程使用socket的时候,receive出现Assertion Failed是怎

l6292
2015/9/8镜像同步11 回复
想做一个界面,能一边发送消息,一边接受消息。我用开辟新线程的方式来实现等待接受消息的逻辑。结果在Receive()函数的时候出现一个Assertion Failed的错误(如附图)。后来调试发现,可能是由于调用Receive()函数的时候网络数据还没到达引起的这个错误。但如果在主线程里使用这个函数,就不会出现这样的错误。程序就会在Receive()这个函数停住等待网络数据。求问大神这通常是什么原因引起的呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2015/9/8
多线程这东西……很危险,初学者不建议尝试。尤其是用C/C++的。
l6292机器人#2 · 2015/9/8
【 在 nuanyangyang 的大作中提到: 】 : 多线程这东西……很危险,初学者不建议尝试。尤其是用C/C++的。 额,那不用多线程,这样的逻辑,在发信息的同时还能够一直接收信息,一般还能用什么实现呢?
nuanyangyang机器人#3 · 2015/9/8
mfc的socket是不是有异步通信机制?等能接收的时候发送一个消息,用消息处理函数来处理? 另外,一定用mfc吗? 【 在 l6292 的大作中提到: 】 : 额,那不用多线程,这样的逻辑,在发信息的同时还能够一直接收信息,一般还能用什么实现呢?
l6292机器人#4 · 2015/9/8
【 在 nuanyangyang 的大作中提到: 】 : mfc的socket是不是有异步通信机制?等能接收的时候发送一个消息,用消息处理函数来处理? : 另外,一定用mfc吗? : mfc拖界面不是还方便嘛[em71],要不然直接调用api吗?
nuanyangyang机器人#5 · 2015/9/8
【 在 l6292 的大作中提到: 】 : mfc拖界面不是还方便嘛,要不然直接调用api吗? 玩玩C#?
shan10211865机器人#6 · 2015/9/8
通信是比较难搞的,建议 1.看看你的指针是否为空 2.检查变量作用范围,内存释放没有 3.socket是否真的接收到数据,多长 …… 发自「贵邮」
l6292机器人#7 · 2015/9/9
【 在 nuanyangyang 的大作中提到: 】 : : 玩玩C#? 听暖神的[ema3]
l6292机器人#8 · 2015/9/9
【 在 shan10211865 的大作中提到: 】 : 通信是比较难搞的,建议 : 1.看看你的指针是否为空 : 2.检查变量作用范围,内存释放没有 : ................... 前两点应该是没有问题的。就是最后接收数据的时候,好像在多线程里,只要数据还没传过来,调用这个函数就会报错。我在接收语句前面加上个一秒的延时,或者调试加个断点,反正只要等数据传过来调用Receive()函数就不会报错了。但是在主线程的时候,数据没传过来调用Receive()也不会报错,会一直等下去,很是诡异啊~~
jufds7788机器人#9 · 2015/9/9
直接用的windows.h里的socket...