我正在实现一个多线程应用程序,它调用使用MFC编写的遗留应用程序中的模块。
当我只使用一个线程运行它时,我的代码运行得很好,但是如果我使用多个线程运行它,那么当CString::LoadString()
调用AfxGetResourceHandle()
时,我总是得到一个断言。调用LoadString()
的字符串是本地字符串,因此根本不会共享。
如果我在CString::LoadString()
一切正常之前添加互斥锁,但由于遗留应用程序的大小和此方法的常用,此解决方案很难实现并会降低应用程序的速度。< / p>
我查看了MS文档,它没有说明线程安全等等。
您对LoadString()
和多线程环境有所了解吗?我的应用程序中的所有DLL都具有相同的字符集,它们都处于DEBUG模式,并且它们都使用MFC共享DLL。
答案 0 :(得分:2)
通常,您只能从使用CWinThread创建的线程访问MFC对象。你没有提供你在辅助线程上得到的确切断言,但我猜你的“其他”线程是以其他方式创建的。有关MFC与多线程的详细信息,请参阅MSDN。