![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Санек |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
Я написал программу которая вычисляет одну фигню(неважно какую). Так при определенных параметрах вычислительный процесс может быть очень долгим. Как сделать так, чтобы пользователь мог остановить процесс вычисления кнопкой на форме. Заранее спасибо
|
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
Заводишь глобальную переменную
var gStop:Boolean; В начале вычисления делаешь ее false gStop := False; В цикле вычисления пишешь Application.ProcessMessages; if gStop then begin break; end; На событие нажатия на кнопку STOP пишешь gStop := True; Это сообщение отредактировал(а) Matematik - 27.3.2006, 10:04 |
|||
|
||||
| Санек |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
спасибо огромное, все работает.
интересно а что делает Application.ProcessMessages; |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
обрабатывает полученные программой сообщения (за время работы от Application.ProcessMessages до Application.ProcessMessages или от начала процедуры до первого Application.ProcessMessages) -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
только этот подход -- не особо корректный -- при перетаскивании формы, ее сворачивании/разворачивании, ... код будет замирать ( что не есть гуд )
лучше вынести вычисления в поток и в нем смотреть флаг, выставляемый по нажатию на кнопку -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Добавлено @ 11:14 используй interlocked-функции -------------------- Обижено школьников: 8 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Ну меня мама в детстве учила, что когда один поток читает переменную, а другой в это же время пишет, то может получиться бяка. Или не то прочитаем, или не то запишем. Или (в основном) все нормально будет. Но вероятность бяки все-же остается. Когда я подрос, тому же самому меня научил и Джкфри Рихтер ))
-------------------- Обижено школьников: 8 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
это если два потока пишут а один читает ( и временами тоже пишет )
а если один читае а другой пишет да еще и один байт ( и нужен нам из него один бит ) все безопасно -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
-------------------- |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
с учетом:
? кстати если два ( или больше ) потока пишут в один ресурс -- это тоже вполне потоково-безопасная операция -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Это что, шутка такая?? -------------------- |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
почему? я же нигде не писал о чтении... ;)
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Ну тогда позволь возразить.
В корне неверно. -------------------- |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
??? почему?
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |