我有一个 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/