Есть необходимость в главном потоке приложения наряду с выборкой и обработкой сообщений дожидаться просигналенного состояния некоторого синхронизационного объекта. Как реализовать такой цикл сообщений -- понятно (MsgWaitForxxx и т.д.), но вот как его потом прикрутить к WTL?
Re: Как в WTL изменить стандартный цикл сообщений своим?
Здравствуйте, qube, Вы писали:
Q>Есть необходимость в главном потоке приложения наряду с выборкой и обработкой сообщений дожидаться просигналенного состояния некоторого синхронизационного объекта.
Может AtlWaitWithMessageLoop подойдет?
... << RSDN@Home 1.1 beta 1 >>
Re: Как в WTL изменить стандартный цикл сообщений своим?
Здравствуйте, qube, Вы писали:
Q>Есть необходимость в главном потоке приложения наряду с выборкой и обработкой сообщений дожидаться просигналенного состояния некоторого синхронизационного объекта. Как реализовать такой цикл сообщений -- понятно (MsgWaitForxxx и т.д.), но вот как его потом прикрутить к WTL?
Я думаю, надо написать потомка CMessageLoop и использовать его.
Re[2]: Как в WTL изменить стандартный цикл сообщений своим?
Здравствуйте, Voyachek Vladislav, Вы писали:
VV>Здравствуйте, qube, Вы писали:
Q>>Есть необходимость в главном потоке приложения наряду с выборкой и обработкой сообщений дожидаться просигналенного состояния некоторого синхронизационного объекта.
VV>Может AtlWaitWithMessageLoop подойдет?
Как тогда должна выглядеть WinMain()? Сейчас она выглядит стандартно:
Так вот, нужно заменить класс CMessageLoop своим — наследуйся от него и переопредели функцию Run.
В этой функции напиши все что надо (посмотри ее стандартную реализацию в WTL). Не забудь также вызвать всякие OnIdle (в ней же).
... << RSDN@Home 1.1 beta 1 >>
Re[3]: Как в WTL изменить стандартный цикл сообщений своим?
VV>Так вот, нужно заменить класс CMessageLoop своим — наследуйся от него и переопредели функцию Run. VV>В этой функции напиши все что надо (посмотри ее стандартную реализацию в WTL). Не забудь также вызвать всякие OnIdle (в ней же).
CMessageLoop::Run() -- не виртуальная, так что наследование не поможет
Re[3]: Как в WTL изменить стандартный цикл сообщений своим?
Здравствуйте, qube, Вы писали:
DT>>Я думаю, надо написать потомка CMessageLoop и использовать его. Q>Как мне кажется, не выйдет, ибо методы у CMessageLoop не виртуальные.
Выйдет, выйдет. Будет нечто вроде:
int main()
{
//attach message loopCMyMessageLoop theLoop;
_Module.AddMessageLoop(&theLoop);
...........
theLoop.Run(); //твой метод
............
}
class CMyMessageLoop : public CMessageLoop
{
int Run()
{
.....
MsgWait......
.....
}
};
Будет вызываться метод Run от нового класса — ведь он вызывается один раз в main.
... << RSDN@Home 1.1 beta 1 >>
Re[3]: Как в WTL изменить стандартный цикл сообщений своим?
Здравствуйте, qube, Вы писали:
DT>>Я думаю, надо написать потомка CMessageLoop и использовать его. Q>Как мне кажется, не выйдет, ибо методы у CMessageLoop не виртуальные.
Выйдет, выйдет. Будет нечто вроде:
int main()
{
//attach message loopCMyMessageLoop theLoop;
_Module.AddMessageLoop(&theLoop);
...........
theLoop.Run(); //твой метод
............
}
class CMyMessageLoop : public CMessageLoop
{
int Run()
{
.....
MsgWait......
.....
}
};
Будет вызываться метод Run от нового класса — ведь он вызывается один раз в main.
... << RSDN@Home 1.1 beta 1 >>
Re[4]: Как в WTL изменить стандартный цикл сообщений своим?
Здравствуйте, qube, Вы писали:
Q>CMessageLoop::Run() -- не виртуальная, так что наследование не поможет
Давно бы уж попробовал. Тебе тут не нужна виртуальность — функцию Run ты вызываешь сам в функции main! Больше в библиотеке wtl она нигде не вызывается. А ссылка на объект theLoop нужна в _Module для добавления различных фильтров и т.п.. Но тебе же не надо (наверное) переопределять эти функции — только Run.
... << RSDN@Home 1.1 beta 1 >>
Re[5]: Как в WTL изменить стандартный цикл сообщений своим?
Здравствуйте, Voyachek Vladislav, Вы писали:
VV>Давно бы уж попробовал. Тебе тут не нужна виртуальность — функцию Run ты вызываешь сам в функции main! Больше в библиотеке wtl она нигде не вызывается. А ссылка на объект theLoop нужна в _Module для добавления различных фильтров и т.п.. Но тебе же не надо (наверное) переопределять эти функции — только Run.
Спасибо, отличная идея.
Мне действительно нужно переопределить только Run.
Re[3]: Как в WTL изменить стандартный цикл сообщений своим?
От:
Аноним
Дата:
08.08.03 13:18
Оценка:
Здравствуйте, PM, Вы писали:
PM>Здраствуйте, Denis Titov. Вы писали:
DT>> Я думаю, надо написать потомка CMessageLoop и использовать его. PM>Скорее уж CMessageFilter