Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在另一个线程上调用非静态类函数_C++_Multithreading_Mfc - Fatal编程技术网

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

C++ 在另一个线程上调用非静态类函数,c++,multithreading,mfc,C++,Multithreading,Mfc,我重写了我很久以前写的一些代码。 代码是一个类,它使用AfxBeginThread启动另一个工作线程。当线程结束时,它需要将其工作返回给调用类 实际上,当线程结束时,它通过PostMessage将一条消息及其结果发送给被调用的类。 但这种方式实际上依赖于MFC,要做到这一点,我的类必须实现所有MFC的东西 如果不发送消息而直接调用此类的非静态方法,则可能是正确的?如果不尝试直接调用方法(这将引入一组全新的线程问题),请尝试使用本机Win32::PostMessage(),而不是使用相同函数的MF

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

实际上,当线程结束时,它通过
PostMessage
将一条消息及其结果发送给被调用的类。 但这种方式实际上依赖于MFC,要做到这一点,我的类必须实现所有MFC的东西


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

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

听起来好像您想要使用常规线程原语,而不是窗口消息原语

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


您只需要确保在访问该类时以线程安全的方式进行。如果你等到线程结束,你应该会没事的。否则,您可以使用关键部分或互斥体。有关更多信息,请参阅。

以及我应该如何接收此消息?我的类不是MFC派生的。@bratao:使用windows程序的正常消息循环(我想)。你说你是用
AfxBeginThread
启动线程的,这是一个MFC函数。不管怎样,Xeo是对的,它只是一条进入消息循环的常规消息,不管您如何处理它(不管是否使用MFC)。如果我进入这门课后没有消息,我会非常在意,它会做很多事情,包括绘画和绘画。如果我在另一个线程中调用一个类函数,它将不会返回到主线程,而是会让两个线程继续工作,这真的很危险。我选择将我的类转换为基于CWnd的类,这样它就可以访问消息映射,真正简化了我的代码;