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++ MFC:从工作线程向主线程发送消息以停止工作线程_C++_Multithreading_Mfc - Fatal编程技术网

C++ MFC:从工作线程向主线程发送消息以停止工作线程

C++ MFC:从工作线程向主线程发送消息以停止工作线程,c++,multithreading,mfc,C++,Multithreading,Mfc,我正在修复一个用MFC编程的GUI应用程序。要运行通信堆栈,将创建一个新线程。在某些事件中,我想停止这个操作,但我知道只有在工作线程中,我无法从停止工作线程本身中获得正确的行为。因此,我需要向主线程发送一条消息,告诉它停止工作线程,以便主线程可以采取正确的操作 我不知道怎么做。我已经查看了CWnd中的SendMessage函数,但它没有将threadid作为参数,也没有得到需要包含的内容来使用。实际上,对工作线程执行任何操作的唯一安全方法是从工作线程本身内部执行。它可能应该被构造成一个while

我正在修复一个用MFC编程的GUI应用程序。要运行通信堆栈,将创建一个新线程。在某些事件中,我想停止这个操作,但我知道只有在工作线程中,我无法从停止工作线程本身中获得正确的行为。因此,我需要向主线程发送一条消息,告诉它停止工作线程,以便主线程可以采取正确的操作


我不知道怎么做。我已经查看了CWnd中的SendMessage函数,但它没有将threadid作为参数,也没有得到需要包含的内容来使用。

实际上,对工作线程执行任何操作的唯一安全方法是从工作线程本身内部执行。它可能应该被构造成一个while(bRun)循环,这样它就可以一直运行到程序关闭为止。无论您试图做什么(停止和启动),都应该由while循环中的代码来处理。

“我无法从停止工作线程本身中获得正确的行为”-为什么?我怀疑应该属于线程的数据不是——你有可能将comms组件链接到表单上,或者是反过来——GUI直接访问thread类中的数据?如果comm堆栈中出现重置命令,堆栈应该停止并自行启动。问题是,如果我调用停止函数,那么线程被终止,然后它无法调用启动函数,因为它不再存在。好的,不要停止线程。在线程中的整个comms init/setup/run代码周围放置一段时间(true){try…catch},如果检测到错误,则抛出。如果将
SendMessage
/
PostMessage
与自定义消息(
WM_APP+x
)一起使用
WPARAM
LPARAM
,则可以传递任何您喜欢的内容。系统不会以任何方式为您解释消息,只会将您提供的参数传递给消息处理程序。