如何使回调函数线程安全。不同的线程将调用此函数来更新UI。该回调函数将具有HWND参数,该参数将由调用者填充。该函数将使用此HWND参数来更新GUI。对于不同的呼叫,HWND将有所不同。
请告诉我如何才能使这个回调线程安全。
问候。
约翰
答案 0 :(得分:2)
请告诉我如何才能使这个回调线程安全。
如果回调函数没有要求的状态,它已经是线程安全的,除非GUI函数本身不是线程安全的(参见本答案的下半部分)。
如果需要状态,请在该状态下包含互斥锁,并在任何读/写访问期间锁定互斥锁。
还有更复杂的锁定范例(例如多读取器/单写入器锁定),但您可能不需要用于GUI。
GUI的另一个问题(对于Java Swing来说是真的;我不记得win32是否适用)是GUI操作通常应该在一个特定的线程中执行。在win32中,这是发布和发送消息(由一个线程处理)的原因。
如果你想使用这种方法,任何时候你想要执行GUI操作,你应该检查你是否在GUI线程中(不记得如何在win32中执行此操作),或执行PostMessage()调用启动特定的GUI操作。