作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个网络库,用户可以将函数指针传递给该库以在某些网络事件上执行。为了防止监听循环阻碍开发人员的应用程序,我将事件处理程序传递给线程。不幸的是,这对于以线程安全的方式处理事情造成了一些麻烦。例如,如果开发人员传递调用其 Windows::Forms 应用程序元素的函数,则会抛出 InvalidOperationException。
有没有什么好的策略来处理线程安全?
最佳答案
函数指针不能是线程安全的,因为它们声明了一个调用点。所以它们只是指针。您的代码始终在调用它的线程中运行(通过函数指针)。
您想要实现的是您的代码在特定线程(可能是 UI 线程)中运行。为此,您必须使用某种队列将调用同步到 MainThread。
这正是 .Net 的 BeginInvoke()/Invoke() 在 Form 上所做的。在这种情况下,队列(位于 .NET 框架的深处)是 Windows 消息队列。
但是您可以使用任何其他队列,只要“正确的”线程从该队列读取并执行调用请求即可。
关于c++ - C++ 中的线程安全函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411230/
我是一名优秀的程序员,十分优秀!