【问题标题】:cleaning up unmanaged c++ thread on c# application exit在 C# 应用程序退出时清理非托管 C++ 线程
【发布时间】:2011-05-09 01:34:27
【问题描述】:

这是我的设置:
1) c# 应用程序启动并调用导出的非托管 c++ dll 函数
2) dll 函数通过 win32 CreateThread 产生一个线程
3) 这个新线程在 while 循环中“工作”,检查退出标志

当我退出 c# 应用程序时,线程立即退出。

问题:
1) 我该怎么做才能让我的线程在退出前进行清理?

非常感谢 - 我是 c# 世界的新手,但对 c++ 很有经验

【问题讨论】:

  • 为什么不让 C# 应用设置退出标志并在应用退出时等待线程句柄?
  • 也许这就是我所缺少的,如何在 c# 应用程序中捕获“退出”事件?
  • @user371602 :每个 C# 应用程序都有一个 Main 入口点,就像 C++ 应用程序有 main 一样。作为简单的第一步,尝试将其内容包装在try..finally 中,然后等待finally 中的线程。几乎肯定有更好的方法,但这取决于应用程序的类型。安慰?赢表格? WPF?

标签: c# c++ multithreading


【解决方案1】:

当您的 C# 应用退出时:

  1. 设置对线程可见的标志。
  2. CreateThread 返回的HANDLE 上调用WaitForSingleObject。这将使它等待线程退出。
  3. 可以选择做一个好公民,并在线程的HANDLE 上调用CloseHandle 以释放其资源,但如果应用程序即将退出,这并不重要。
  4. 定期检查线程内的这个标志,看看它是否应该退出循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多