c++ - C++ 中的线程安全函数指针

标签 c++ multithreading

我正在编写一个网络库,用户可以将函数指针传递给该库以在某些网络事件上执行。为了防止监听循环阻碍开发人员的应用程序,我将事件处理程序传递给线程。不幸的是,这对于以线程安全的方式处理事情造成了一些麻烦。例如,如果开发人员传递调用其 Windows::Forms 应用程序元素的函数,则会抛出 InvalidOperationException。

有没有什么好的策略来处理线程安全?

最佳答案

函数指针不能是线程安全的,因为它们声明了一个调用点。所以它们只是指针。 您的代码始终在调用它的线程中运行(通过函数指针)。

您想要实现的是您的代码在特定线程(可能是 UI 线程)中运行。 为此,您必须使用某种队列将调用同步到 MainThread。

这正是 .Net 的 BeginInvoke()/Invoke() 在 Form 上所做的。在这种情况下,队列(位于 .NET 框架的深处)是 Windows 消息队列。

但是您可以使用任何其他队列,只要“正确的”线程从该队列读取并执行调用请求即可。

关于c++ - C++ 中的线程安全函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411230/

相关文章:

c++ - 在类中初始化QHash

c++ - 使用指向自身的指针初始化成员变量

c++ - 从spinbox保存数据

c++ - Rxcpp 中的调度器

Python 需要 GIL。但是 Jython 和 IronPython 没有。为什么?

c++ - 三个原子变量上的 CompareAndExchange

c++ - 使用 boost.python 从 C++ 将变量导出到 python

ios - 解析函数 `findObjectsInBackgroundWithBlock:` 检索部分数据库对象,但不是全部

C# UWP 取消任务 + 给 child 发信号

c# - Xamarin.Forms System.Threading.Tasks.TaskCanceledException