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

发布于 2024-10-11 22:21:14 字数 220 浏览 2 评论 0原文

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

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

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

I am working on a wrapper class for an unmanaged algorithm class. I've come to a point where I need separate threads for the processing and on-the-fly display of the results.

I have a single method in my unmanaged class that does the work(I don't think I can change that). Inside it there is a main loop. My plan was to enable drawing the results at the end of each iteration.

I wanted to use System::Threading::Monitor methods to perform the synchronization. However they require a managed reference to work which I cannot create in an unmanaged class. How am I supposed to solve that problem and perform thread synchronization?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

装纯掩盖桑 2024-10-18 22:21:14

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

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

Either switch your class to managed, or use unmanaged synchronization objects. If you for some reason cannot change the algorithm to be managed, you can have two classes - one managed, the other one unmanaged with algorithm. The first one will use functionality of the other one and will provide synchronization using Monitor for it.

Or, if you want to keep whole code unmanaged, go to Windows API for synchronization. See MSDN list of functions - look at CreateMutex, CreateSemaphore and InitializeCriticalSection for more information. Mutex and critical section are very similar to simple lock provided by Monitor class. (In fact, Monitor is implemented to work the same way as them, adding some more functionality for signalling.) See CreateEvent for information on signalling.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文