在 C# 应用程序退出时清理非托管 C++ 线程
Posted
技术标签:
【中文标题】在 C# 应用程序退出时清理非托管 C++ 线程【英文标题】:cleaning up unmanaged c++ thread on c# application exit 【发布时间】: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?
【参考方案1】:
当您的 C# 应用退出时:
-
设置对线程可见的标志。
在
CreateThread
返回的HANDLE
上调用WaitForSingleObject
。这将使它等待线程退出。
可以选择做一个好公民,并在线程的HANDLE
上调用CloseHandle
以释放其资源,但如果应用程序即将退出,这并不重要。
定期检查线程内的这个标志,看看它是否应该退出循环。
【讨论】:
以上是关于在 C# 应用程序退出时清理非托管 C++ 线程的主要内容,如果未能解决你的问题,请参考以下文章