相互依赖的线程和所有权

时间:2014-03-13 15:45:38

标签: c++ multithreading winapi visual-studio-2013

背景
我有两个GUI线程:MFC / Win32应用程序中的Main和SendEmail。

通常,主线程会生成发送电子邮件线程并继续运行。发送电子邮件线程告诉主线程的窗口保持禁用并捕获鼠标,当它退出时,它启用主线程的窗口并释放鼠标。

这使用户在发送电子邮件时禁用主应用程序的工作流程。在单独的线程中执行此操作的需要与自2010年以来MAPI和Outlook的问题有关,如果它在主线程上执行,它将锁定应用程序。

但是,如果在发送邮件线程仍在运行时主应用程序确实退出,则进程崩溃(发送邮件线程尝试启用不再存在的主线程窗口...)

目标:
让主线程在终止

之前等待发送邮件线程终止

粘贴点:
目前,电子邮件线程是自毁的(没有内存管理,因为它在运行方法完成时会调用自身的删除)。但我希望主线程保持对该线程的引用,以便它可以在退出时等待实时线程。

我不能使用弱引用,我不认为,因为主线程确实应该等待这个线程对象(线程本身就是等待的),所以我不希望代表这个线程的对象自毁而最小线程持有它。

我可以使用共享指针 - 这样应用程序和正在运行的线程都可以有效地保持线程对象的活动...但是当线程完成时如何删除应用程序的线程对象副本? (我不希望线程对象继续存在而无意义。)

我可以从电子邮件主题发布消息到主应用程序线程说“我正在死”,以便主线程立即等待线程终止,然后删除其引用...

有更好的想法吗?

0 个答案:

没有答案