在线程中调用C像回调一样

时间:2009-11-19 15:43:45

标签: c++ c multithreading callback

我有一个C静态库,

回调定义:

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

库中的一个函数:

int init(HandleEvents _handleEvents)

另一个在VS中开发的C ++ GUI。它链接了这个静态lib并调用了lib的 init 函数,给出了一个函数指针。

的init(&安培; CGateway :: handleEventsFunc);

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

在静态lib中的一个线程中调用C ++ GUI的这个回调。但我得到了堆腐败的错误。

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

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

2 个答案:

答案 0 :(得分:1)

[关于多个堆的错误陈述,如Adisak所指出的,已删除]

要检查的一件事是,您没有从工作线程做任何与GUI相关的事情。访问窗口只能从创建它们的主线程安全。如果您必须更新GUI内容,则必须使用PostMessage()来解耦。

答案 1 :(得分:0)

确保对任何可由一个线程修改并由另一个线程使用(读取或修改)的变量使用互斥或​​其他形式的线程保护。

在多线程代码中,堆损坏通常是代码的一种症状,它不是线程安全的访问内存。