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

时间:2011-01-16 01:28:23

标签: multithreading c++-cli

我正在为一个非托管算法类的包装类工作。我已经到了需要单独线程进行处理和动态显示结果的地步。

我在我的非托管类中有一个方法来完成工作(我认为我不能改变它)。里面有一个主循环。我的计划是在每次迭代结束时绘制结果。

我想使用System :: Threading :: Monitor方法来执行同步。但是,它们需要托管引用才能在非托管类中创建。我该怎么解决这个问题并执行线程同步?

1 个答案:

答案 0 :(得分:2)

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

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