![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Albinos_x |
|
||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
в общем делаю так:
если не делать через поток, то всё работает нормально. и самое интересное что если сделать так:
то ошибка вылетает на form1.Timer1.Enabled:=false; При чём при пошаговой отладке эта ошибка не вылетает(?). Файл во всех случаях создаётся. Объясните плз, в чём я не прав... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||
|
|||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
я тут порылся в коде... MessageDlg не вылетает потому что на нём и вылетает ошибка... если эти строчки убрать то уже ошибка не вылетает...
может есть ещё способ как вывести из потока сообщение о завершении работы процедуры? -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
MessageBox(0, 'Я всё', 'Поток', MB_OK);
Добавлено @ 00:14
|
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
СПАСИБО!
![]() Всё работает... поясни пожалуйста, почему MessageDlg не хотел работать? -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Потому что MessageDlg принадлежит Application.
Поэтому тебе нельзя юзать user объекты основного потока. А MessageBox - чистый WinAPI. Он никому не принадлежит. Но работать с классами из вторичного потоко не рекомендуется - будут накладки основного и вторичного потока. Особенно, если таких потоков много. Например form1.ListBox1.Items.Add(TypFile[j].rtFileName). Если он одновременно будет вызван из двух потоков, то лажа получится. Поэтому по всем правилам рекомендуется работать с визуальными компонентами только в синхронизации. |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
ясно...
это у меня пока тестовое приложение... а так я буду блокировать вызов ещё одного потока, пока этот не закончит работать... еще раз СПАСИБО! ![]() -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Нельзя работать в дополнительном потоке с формами. Ни в каком виде. -------------------- |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
у меня всё нормально работает... если не использовать поток, то мне придётся по всему коду ProgressMessages расставлять, что не есть хорошо... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
Демо |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Ну хорошо... До поры работает.
Зачем? Ты, скорее всего, логику спроектировал неправильно. У тебя поток чем занимается? -------------------- |
||||
|
|||||
Albinos_x |
|
||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
чтение(одного или нескольких)/запись(в один) файла(ов) Добавлено @ 10:46
если не проставлять (или не организовывать поток), то приложение будет "зависать" на время обработки файлов... это не очень хорошо смотрится... причём процесс обработки из-за этого тоже не отображается... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||
|
|||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
В принципе, логически правильно. Для подобных задач существует 2 простых решения. 1. Поток работает, но процессом отображения хода работы доп. потока занимается основной поток. Самое простое и логичное решение. Но не всегда приемлимо, если основной поток вообще не должен знать о дополнительном. Синхронизация не вызывает проблем. 2. Поток работает, в нем же создается окно средствами Win32Api, в котором и отображается ход работы потока. Решение хорошее, но несколько более трудоемкое. Синхронизация не требуется. -------------------- |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
ну я писал, что это пока тестовое приложение... поэтому остановился на блокировке вызова второго потока... а когда буду делать не тестовое думаю всё таки остановиться на втором варианте.... Спавибо за совет. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |