c++ - 在线程中像回调一样调用 C

标签 c++ c multithreading callback

我有一个 C 静态库,

回调定义:

typedef  void (*HandleEvents) (enum events eventID, int msgSize, char *msg);

库中的一个函数:

int init(HandleEvents _handleEvents)

还有另一个用VS开发的C++ GUI。它链接此静态库并调用库的 init 函数,提供函数指针。

初始化(&CGateway::handleEventsFunc);

其中 CGateway::handleEventsFunc 是一个静态类函数。

在静态库中的线程中调用 C++ GUI 的回调。但是我得到了堆损坏的错误。

总而言之,有 2 个线程,一个在静态库中,一个在 Main GUI 应用程序中。静态库调用 Main GUI 的类函数。

那么在线程中调用回调函数的正确方式是什么?

最佳答案

[关于多个堆的不正确陈述,如 Adisak 所指出的,已删除]

要检查的一件事是,您没有在工作线程中执行任何与 GUI 相关的操作。只有从创建它们的主线程访问窗 Eloquent 是安全的。如果您必须更新 GUI 内容,则必须使用 PostMessage() 将其解耦。

关于c++ - 在线程中像回调一样调用 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764218/

相关文章:

c++ - Qt 还是 Symbian C++?

c - 文本文件编辑 C

c - 作业 : Help transalate pseudo code into C code

java - JMX 连接超时

c++ - 尝试创建线程的问题

c++ - WaitForSingleObject 在等待超时时间为零时会导致上下文切换吗?

c++ - 在赋值运算符中析构和重建对象是一个坏主意吗?

c++ - 初始化列表中的编译时替换

c# - 安装完软件后如何安装USB驱动

c - 如何将复杂数据类型从主机字节顺序转换为网络顺序