在另一个线程上调用非静态类函数

时间:2011-03-23 03:43:15

标签: c++ multithreading mfc

我重写了很久以前写的一些代码。 代码是一个用AfxBeginThread启动另一个工作线程的类。当线程结束时,它需要将它返回到调用类。

实际上当线程结束时,它会将PostMessage的消息发送给被调用的类。 但这种方式实际上依赖于MFC,为此,我的类必须实现所有MFC的东西。

如果不是发送消息而是直接调用此类的非静态方法,可能是正确的吗?

2 个答案:

答案 0 :(得分:3)

尝试使用本机Win32 ::PostMessage()而不是相同函数的MFC实现,而不是尝试直接调用方法(这会引入一组全新的线程问题)。任何线程都可以调用::PostMessage()来安全地向另一个线程发送消息。

答案 1 :(得分:0)

听起来好像你想使用常规线程原语,而不是窗口消息传递原语。

您使用的是AfxBeginThread的哪个版本?如果您将类实例传递给它,则应该能够在知道其完成运行后直接访问该类的成员。如果您传递了一个函数指针,则可以使用lParam参数传递任何类指针,然后将其用作通信上下文。

您只是想确保在访问该类时以线程安全的方式执行此操作。如果你等到线程结束,你应该没事。否则,您可以使用Critical Sections或Mutexes。有关详细信息,请参阅MSDN article on thread synchronization primitives