![]() |
|
|
![]()
|
|
| Superklug |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Доброго времени суток!
Нарисовал на бумажке алгороитм, начал его реализовывать и столкнулся с такой проблемой: посреди рекурсии, мне нужно ждать пока пользователь нажмет на кнопку... На консоли все просто:
А как сделать это под windows? Пробовал вставлять вот это:
по нажатию пользователем на кнопку, flag присваивается true. Но тогда не обрабатываются сообщения от окна (например о закрытии). Точнее они обрабатываются, но только по завершении цикла. Как поступить в такой ситуации? Переделать алгоритм, чтобы он был ориентирован на события? Каким-то образом проверять нажал ли пользователь выход (или др.) во время цикла? Еще есть вариант: использовать потоки. Но не уверен, что удобно будет. Мне надо постоянно взаимодействовать с компонентами формы и БД... Это сообщение отредактировал(а) Superklug - 19.4.2009, 14:08 |
||||
|
|||||
| Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Сейчас решил попробовать с потоками.
В нужном мне месте пишу Suspend(); Но поток не останавливается( В чем может быть дело? |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Перечитал раз 10 ваш вопрос, но не понял некоторых вещей:
1. Где вы здесь увидели рекурсию ? У вас ведь просто цикл. 2. Следующий код работает с рекурсией и задает вопрос:
данный код блокирует выполнение основного потока и ждет ответ на вопрос. Зачем еще какой-то цикл ожидания нужен вообще не понятно. Это сообщение отредактировал(а) Artemon - 19.4.2009, 20:10 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| taiven |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 302 Регистрация: 30.6.2008 Репутация: 3 Всего: 9 |
А если flag присвоить true в в событии OnClose формы? Это сообщение отредактировал(а) taiven - 19.4.2009, 17:32 |
|||
|
||||
| Лапоть |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 3.4.2009 Репутация: 1 Всего: 2 |
Superklug, а теперь, пожалуйста, члено и раздельно объясни свою задачу! Я ещё могу представить себе в консоли цикл вопросов-ответов для доступа куда-либо... Но дуплить такое в оконном режиме...
Не-а, судя по твоему же коду, тебе нужно получить ОТВЕТ! |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Мне кажется, Superklug просто привёл пример, как он это делает в консоле. Но это же не значит, что он кому-то задаёт вопросы в цикле... -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 1 Всего: 8 |
Можно на события переделать. Если ответ пользователя означает нажатие кнопки.
Можно как-то так
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
nworm, у Superklug цикл. И как я понял, нужно при некоторых условиях делать остановки и ждать действий пользователя. А в вашем случае, пользователю придётся много клацать
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 1 Всего: 8 |
Схема может быть похожей и без кнопки.
И этот старт - реакция на нужное действие пользователя. |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Народ, вы гадаете, пока автор не отпишется, трудно сказать, в каком направлении мыслить. ИМХО человек переходит с консоли на объекты, и еще не охватил все аспекты.
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Скорее всего так... -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Superklug |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Извините что долго не появлялся...
Цикл на консоле я привел просто как пример. У меня же есть рекурсивная функция.. Щас опишу подробней... Рекурсия - это обход дерева. Листья дерева - это вопросы к пользователю. Ответ пользователя на вопрос может изменить ход рекурсии. В итоге имеем:
В итоге ожидание я сделал так:
и обработчик события OnCloseQuery
Вроде работает, но понимаю, что это очень корявое решение. Отсюда вопрос: как лучше реализовать такую задачу? Отказаться от рекурсии и изменить алгоритм? P.S. с ShowMessage все будет работать как надо, однако реализован интерфейс. Т.е. вопрос должен выводиться в Memo, а ответ получаться после нажатия на Button |
||||||
|
|||||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Superklug, пробуй так:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
А почему не использовать дополнительную форму вместо ShowMessage? На форму можно накидать всё что угодно. Вызывать её для остановки основного потока надо как модальное окно. -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |