【发布时间】:2013-07-26 22:45:10
【问题描述】:
我正在修复一个使用 MFC 编程的 GUI 应用程序。为了运行通信堆栈,创建了一个新线程。在某些事件中,我想停止此操作,但我知道仅在工作线程中,我无法通过从自身停止工作线程来获得正确的行为。所以我需要向主线程发送一条消息并告诉它停止工作线程,以便主线程可以采取正确的行动。
我不确定如何执行此操作。我查看了 CWnd 中的 SendMessage 函数,但它没有将 threadid 作为参数,而且我没有得到使用 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944(v=vs.85).aspx 需要包含的内容。
【问题讨论】:
-
'我无法通过停止工作线程本身来获得正确的行为' - 为什么?我怀疑应该属于线程的数据不是——你有任何机会把通讯组件放在表单上,或者反过来——GUI直接访问线程类中的数据?
-
好吧,如果有一个重置命令进入通讯堆栈,堆栈应该停止并自行启动。问题是如果我调用 Stop 函数然后线程被终止,然后它 obv 不能调用 start 函数,因为它不再存在。
-
好的,不要停止线程。在线程中的整个通信初始化/设置/运行代码周围放置一个 while(true){try...catch},如果检测到错误,则抛出。
-
如果您使用
SendMessage/PostMessage和自定义消息 (WM_APP + x),您可以将任何您喜欢的作为WPARAM和LPARAM传递。系统不会以任何方式为您解释消息,而只会将您提供的参数传递给消息处理程序。
标签: c++ multithreading mfc