![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще нужна помощь мастеров!
ProtoSoft © (2002-11-27 19:19:00)Есть такая трабла, с тем же THRead другого потока.
Функция, которую я запускаю в отдельном потоке сканирует каталоги на диске, собирает инфо о файлах и т.д., если я ее в процедуре execute запускаю свою функция с помощью
...
procedure TScanDir.Execute;
begin
Synchronize(DoScanProc);
end;
procedure TScanDir.DoScanProc;
begin
ScanDirThRead; //Моя функция
end;
Все работает хорошо абсолютно, вот только мое окно "мертвое", пока не закончится выполняться поток.
А если я убираю Synchronize() и втыкаю без него, все работает ОК, окно "живое", но все ОК пока не закончится процедура ScanDirThRead, затем возникает ошибка, что-то там OS critical error или что-то вроде этого.
Поможите плз, с меня пиво!
ProtoSoft (2002-11-27 23:02:00) [1]//Cobalt
//Создавай для потока отдельный метод без параметров (в кач-ве их можно использовать поля TThread) типа DrawChanges, в котором будешь обращаться к форме и прочим контролам. И когда надо(только отрисоваться и т.п.), вызывай Synchronize(DrawChanges);
Можно несколько методов сделать, главное, чтоб без входных параметров
А можно поподробней, честно говоря я не совсем понял, а если еще пример, то вообще ОК.
Да если хочешь я могу кинуть тебе вырезку из моего кода, как я все это делаю. Мыль на мыло, я тебе вышлю исходник
Cobalt (2002-11-27 21:42:00) [2]Создавай для потока отдельный метод без параметров (в кач-ве их можно использовать поля TThread) типа DrawChanges, в котором будешь обращаться к форме и прочимконтролам. И когда надо(только отрисоваться и т.п.), вызывай Synchronize(DrawChanges);
Можно несколько методов сделать, главное, чтоб без входных параметров
ProtoSoft (2002-11-27 20:16:00) [3]k Мне нужно, чтоб мое окно статуса работодабельное было! Чтоб я его мог переместить, установить другие параметры и т.д.
k (2002-11-27 19:31:00) [4]ответ очевиден
в случае Synchronize(DoScanProc); DoScanProc выполняется в основном потоке, вешая твою прогу.
да и зачем Synchronize нужен, если DoScanProc использует VCL и не обработывает мессаги?