我正在开发一个基本上是单线程的程序,它唯一的线程是主事件循环线程。因此,它的所有数据结构基本上都不受关键区域的保护。
在最近集成了一些基于DirectShow API的新功能之前,它一切正常。一些DirectShow API打开第二个事件循环,并在第二个循环内调度消息(即,不可预测地调用其他事件处理回调)。因此,当调用第二个事件处理函数时,它可能会损坏调用DirectShow API的函数正在访问的数据结构。
我在内核编程方面有一些经验。我想到的是,对于单线程程序,它应该如何处理它的数据结构就像内核应该如何处理每个CPU的数据结构一样。在内核中,当一个函数访问每个CPU数据时,它必须禁用中断(非常类似于第二个事件循环中的消息调度)。但是,我发现没有简单的方法可以避免调用DirectShow API或阻止在其中创建第二个事件循环,有什么办法吗?
答案 0 :(得分:1)
互斥。信号灯。锁定。无论你想叫什么名字,这都是你需要的。
答案 1 :(得分:0)
根据确切的问题和您的代码,可以想到几种可能的解决方案: