![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]()
Здравствуйте. Подскажите пожалуйста как можно обработать пару проблемок.
1. При удачном завершении потока должно закрываться окно StatusForm. Окно закрывается, но есть мелкая неприятность - если ничего не трогать, то после завершения окно висит, а как только на жать на любую клавишу или двинуть мышь, то тогда закрывается. Вот хотелось бы, чтобы эта ситуация устранилась. Я так понимаю, что окно получает сообщение на закрытие и при следующем такте только начинает обрабатываться... Или я не так понимаю... 2. Нужно в случае прерывания потока так же закрывать окно StatusForm, но вот что-то никак не получается... Проект прикрепил... Я так понимаю, что тут в принципе нет ничего сложного, просто я в 1 раз с потоками работаю... Последний раз редактировалось Stilet; 26.02.2010 в 14:17. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 23.04.2009
Сообщений: 1,058
|
![]()
может стоит почитать про
Код:
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
|
![]() |
![]() |
![]() |
#3 |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
![]()
Все-таки, в следующий раз лучше бы выложить код потока в тегах [code], чем прикреплять целый проект ( мало найдется желающих ковыряться в чужих исходниках ).
По сабжу: Ваша проблема возникает из-за того, что вы обращаетесь напрямую к VCL-компонентам из дополнительного потока (в данном случае к форме). Что категорически не рекомендуется, причем самой средой при создании модуля потока. (Из-за особенностей реализации VCL-библиотеки). Перенесите код закрытия (условную конструкцию) внутрь синхронизируемого метода updpr. Это гарантирует, что метод будет выполнятся к контексте главного потока. Причем Suspended:=false; оттуда придется убрать. Дополнительный поток не может сам себе скомандовать уснуть - это приведет к взаимоблокировке главного и дополнительного потоков ))
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. |
![]() |
![]() |
![]() |
#4 | ||
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]() Цитата:
А что касается преноса условной части... Сделал увы не помогло... Цитата:
Мне удалось сделать, чтобы окно получало сообщение о закрытии. Осталась проблема - независимо, удачно завершилась операция или была прервана пользователем, окно с прогрес баром висит пока не нажмёшь на кнопку или не пошевелишь мышью... Для удобства: тексты потока и статус-формы: Текст формы: Код:
Код:
Последний раз редактировалось Arkuz; 26.02.2010 в 19:54. |
||
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]()
В принципе нашёл выход из положения. На форму добавил лэйбл и использую его как статус, когда копируется, статус - выполняется, по завершении - завершено и пока что-нибудь не нажмёшь окошко висит и информирует...
Не было бы счастья, да несчастье помогло :-) |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с дочерней формой в DLL | madmech | Общие вопросы Delphi | 3 | 09.06.2009 19:21 |
Проблема с формой пароля | almus | Microsoft Office Excel | 7 | 01.10.2008 14:12 |
Проблема с реализацией потока | InseR | Общие вопросы Delphi | 11 | 19.08.2008 12:20 |
Проблема с новой формой | Ellita | Общие вопросы Delphi | 11 | 06.09.2007 17:14 |
Проблема с формой. | Teen4jump | Общие вопросы Delphi | 2 | 07.08.2007 16:46 |