multithreading - C++/CLI线程同步,包括托管和非托管代码

标签 multithreading c++-cli

我正在为非托管算法类开发包装器类。我已经到了需要处理和动态显示结果的单独线程的地步。

我在非托管类中只有一个方法可以完成工作(我认为我无法更改)。内部有一个主循环。我的计划是允许在每次迭代结束时绘制结果。

我想使用System::Threading::Monitor方法执行同步。但是,它们需要托管引用才能工作,而我无法在非托管类中创建该引用。我应该如何解决该问题并执行线程同步?

最佳答案

可以将您的类切换为托管类,也可以使用非托管同步对象。如果您由于某种原因无法更改要管理的算法,则可以有两种类别-一种是托管的,另一种是不使用算法托管的。第一个将使用另一个功能,并使用Monitor为其提供同步。

或者,如果您想使整个代码不受管理,请转到Windows API进行同步。请参阅MSDN函数列表-有关更多信息,请参见CreateMutex,CreateSemaphore和InitializeCriticalSection。互斥锁和临界区与Monitor类提供的简单锁非常相似。 (实际上,Monitor的实现方式与它们的工作方式相同,增加了一些信令功能。)有关信令的信息,请参见CreateEvent。

关于multithreading - C++/CLI线程同步,包括托管和非托管代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703253/

相关文章:

java并发: CopyOnWriteArrayList strategy

java - 使用在其外部线程中更新的arrayList值

c# - 如何在 C++/CLI 中将属性添加到返回值?

c# - 如何将 C# 方法作为回调传递给 CLI/C++ 函数?

c++ - 包括来自 C++/CLI 的 native C++ header

java - 试图找到 CH34xAndroidDriver.isConnected() 何时变为真

python - Start() vs run() 对于 Python 中的线程?

multithreading - 多线程分析技术

c++ - 基于 bool 值更新 GUI

.net - 如何在 C++ 中将 std::string 转换为 CV::String?