gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:40:25 30 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com