我重写了很久以前写的一些代码。
代码是一个用AfxBeginThread
启动另一个工作线程的类。当线程结束时,它需要将它返回到调用类。
实际上当线程结束时,它会将PostMessage
的消息发送给被调用的类。
但这种方式实际上依赖于MFC,为此,我的类必须实现所有MFC的东西。
如果不是发送消息而是直接调用此类的非静态方法,可能是正确的吗?
答案 0 :(得分:3)
尝试使用本机Win32 ::PostMessage()
而不是相同函数的MFC实现,而不是尝试直接调用方法(这会引入一组全新的线程问题)。任何线程都可以调用::PostMessage()
来安全地向另一个线程发送消息。
答案 1 :(得分:0)
听起来好像你想使用常规线程原语,而不是窗口消息传递原语。
您使用的是AfxBeginThread
的哪个版本?如果您将类实例传递给它,则应该能够在知道其完成运行后直接访问该类的成员。如果您传递了一个函数指针,则可以使用lParam参数传递任何类指针,然后将其用作通信上下文。
您只是想确保在访问该类时以线程安全的方式执行此操作。如果你等到线程结束,你应该没事。否则,您可以使用Critical Sections或Mutexes。有关详细信息,请参阅MSDN article on thread synchronization primitives。