![]() |
|
|
![]()
|
|
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Приложение на MFC.
По кнопке на форме запускаю функцию. Она может выполняться долго. Хотелось бы иметь возможность ее прервать. Как это сделать попроще, без потоков? У меня была такая идея. но не хватило опыта ее реализовать. В этой долгой функции периодически проверяется очередь сообщений. Видел такой код:
но не смог его приспособить для себя. Что за lpMsg и hWnd должны быть? ну и из этих сообщений надо ловить определенноё - от кнопки которая останавливает этот процесс. Наверно для этого надо будет определить свойй тип сообщений - типа WM_STOP. Как это сделать тоже неосилил пока. Может кто-то делал подобное и может направить меня в нужное русло? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
ksili, как вариант - создать поток - запихнуть в него твою функцию. этим потоком, через гуй, можешь затем манипулировать.
|
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
С этим я чуть попозже разберусь. Я в MFC второй день. Не врубаюсь пока как AfxBeginThread указать, ждать поток или пусть параллельно работает.
А пока Тем более эта функция может себя рекурсивно вызывать. Так что на потоки переделать быстро не получится. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Без потоков.
Делаешь флаг - bool m_shouldRun; По кнопке, которая запускает функцию, взводишь флаг, а по другой кнопке - сбрасываешь. Внутри функции проверяешь флаг и либо продолжаешь работу, либо завершаешь. Плюс внутри функции нужно периодически давать приложению обрабатывать сообщения, иначе флаг по кнопке не сбросится. Как это сделать сходу не скажу, не помню, нужно поискать... |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Собственно, у меня в этом же загвоздка -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
вот нашел. сделай как здесь.
создай подобный метод и периодически вызывай его из своей "длинной" функции. |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
нет, Andrey44, не поможет
|
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
voov, Ну да, нужно периодически обрабатывать очередь сообщений. GetMessage? DispatchMessage и т.д.
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
PickMessage + DispatchMessage
-------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |