Winapi, синхронизация с главным потоком
От: Rimidalv  
Дата: 28.09.06 14:49
Оценка:
Добрый день!

Есть приложение, в котором крутятся два потока: основной интерфейсный и дополнительный рабочий.
Мне надо фрагменты кода рабочего потока выполнять синхронно с интерфейсным.
Первое, что пришло на ум (это используется в 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'а?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.