Добрый день!
Есть приложение, в котором крутятся два потока: основной интерфейсный и дополнительный рабочий.
Мне надо фрагменты кода рабочего потока выполнять синхронно с интерфейсным.
Первое, что пришло на ум (это используется в VCL, метод TThread::Synchronize если мне не изменяет память), это отправка SendMessage в главное окно и в обработчике выполнение этого кода. Примерно так:
// рабочий поток:
SendMessage(hMainWnd, WM_SYNCH, (WPARAM)func, params);
...
// обработчик в рабочем потоке:
int func(LPARAM params)
{
}
// интерфейсный поток:
case WM_SYNCH:
(int(*)(LPARAM)(wparam)(lparam);
break;
Здесь есть проблема — func есть либо одного типа, либо надо очень мудрить с шаблонами. Да и выделение синхронного кода в отдельную функцию не всегда подходит.
Может кто знает как переходить в интерфейсный поток без вызова SendMessage и добавления callback'а?