Скажите, пожалуйста, как я могу сделать этот поток обратного вызова безопасным.
Если функция обратного вызова не требует состояния, оно уже поточно-безопасное, если только сами функции графического интерфейса не являются поточно-безопасными (см. вторую половину этого ответа).
Если требуется состояние, включите мьютекс в это состояние и заблокируйте мьютекс во время любого доступа для чтения / записи.
Существуют более сложные блокировкипарадигмы (например, блокировки нескольких читателей / одного писателя), но вам, вероятно, это не понадобится для графического интерфейса.
Другая проблема для графических интерфейсов (верно для Java Swing; я не могу вспомнить,это верно для win32 или нет) в том, что операции с графическим интерфейсом обычно должны выполняться в одном конкретном потоке.В win32 это является причиной для отправки и отправки сообщений (которые обрабатываются одним потоком).
Если вы хотите использовать этот подход, каждый раз, когда вы хотите выполнить операцию с графическим интерфейсом, вы должны проверить, находитесь ли вы впоток GUI (не могу вспомнить, как это сделать в win32) или выполнить вызов PostMessage (), чтобы запустить определенные операции GUI.