线程安全回调函数

时间:2010-12-12 16:49:24

标签: multithreading visual-c++ thread-safety mutex semaphore

如何使回调函数线程安全。不同的线程将调用此函数来更新UI。该回调函数将具有HWND参数,该参数将由调用者填充。该函数将使用此HWND参数来更新GUI。对于不同的呼叫,HWND将有所不同。

请告诉我如何才能使这个回调线程安全。

问候。

约翰

1 个答案:

答案 0 :(得分:2)

  

请告诉我如何才能使这个回调线程安全。

如果回调函数没有要求的状态,它已经是线程安全的,除非GUI函数本身不是线程安全的(参见本答案的下半部分)。

如果需要状态,请在该状态下包含互斥锁,并在任何读/写访问期间锁定互斥锁。

还有更复杂的锁定范例(例如多读取器/单写入器锁定),但您可能不需要用于GUI。


GUI的另一个问题(对于Java Swing来说是真的;我不记得win32是否适用)是GUI操作通常应该在一个特定的线程中执行。在win32中,这是发布和发送消息(由一个线程处理)的原因。

如果你想使用这种方法,任何时候你想要执行GUI操作,你应该检查你是否在GUI线程中(不记得如何在win32中执行此操作),或执行PostMessage()调用启动特定的GUI操作。