我正在制作一个视频游戏,我有一个负责图形的主线程,以及一个负责网络(同步UDP套接字)的独立工作线程。
问题在于,当我关闭游戏时,我收到“访问冲突”错误,调试器将我指向几行代码之一 - 每个代码引用一个我相信的对象已经在另一个线程中被破坏了。
由于我使用异步线程,我的直觉是主线程几乎总是在recv()调用阻塞时被杀死,然后最终当recv()返回时,它现在拥有的所有指针都是伪造的和visual studio开始抛出错误。
BTW我正在使用Boost线程,Visual Studio 2008和C ++
答案 0 :(得分:3)
在清理共享资源之前,主线程应该等待网络线程完成。在Boost中,boost::thread::join()
函数应该可以解决问题。
请务必同时处理boost::thread_interrupted
!
(N.B。这是一种通用的答案;我没有特别使用Boost线程的经验。)