Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Еще нужна помощь мастеров!   Найти похожие ветки 

 
ProtoSoft ©   (2002-11-27 19:19) [0]

Есть такая трабла, с тем же THRead другого потока.
Функция, которую я запускаю в отдельном потоке сканирует каталоги на диске, собирает инфо о файлах и т.д., если я ее в процедуре execute запускаю свою функция с помощью
...
procedure TScanDir.Execute;
begin
Synchronize(DoScanProc);
end;

procedure TScanDir.DoScanProc;
begin
ScanDirThRead; //Моя функция
end;

Все работает хорошо абсолютно, вот только мое окно "мертвое", пока не закончится выполняться поток.

А если я убираю Synchronize() и втыкаю без него, все работает ОК, окно "живое", но все ОК пока не закончится процедура ScanDirThRead, затем возникает ошибка, что-то там OS critical error или что-то вроде этого.
Поможите плз, с меня пиво!


 
©   (2002-11-27 19:31) [1]

ответ очевиден
в случае Synchronize(DoScanProc); DoScanProc выполняется в основном потоке, вешая твою прогу.

да и зачем Synchronize нужен, если DoScanProc использует VCL и не обработывает мессаги?


 
ProtoSoft ©   (2002-11-27 20:16) [2]

k Мне нужно, чтоб мое окно статуса работодабельное было! Чтоб я его мог переместить, установить другие параметры и т.д.


 
Cobalt ©   (2002-11-27 21:42) [3]

Создавай для потока отдельный метод без параметров (в кач-ве их можно использовать поля TThread) типа DrawChanges, в котором будешь обращаться к форме и прочим контролам. И когда надо(только отрисоваться и т.п.), вызывай Synchronize(DrawChanges);
Можно несколько методов сделать, главное, чтоб без входных параметров


 
ProtoSoft ©   (2002-11-27 23:02) [4]

//Cobalt
//Создавай для потока отдельный метод без параметров (в кач-ве их можно использовать поля TThread) типа DrawChanges, в котором будешь обращаться к форме и прочим контролам. И когда надо(только отрисоваться и т.п.), вызывай Synchronize(DrawChanges);
Можно несколько методов сделать, главное, чтоб без входных параметров

А можно поподробней, честно говоря я не совсем понял, а если еще пример, то вообще ОК.

Да если хочешь я могу кинуть тебе вырезку из моего кода, как я все это делаю. Мыль на мыло, я тебе вышлю исходник



Страницы: 1 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
1-37030
Zipper
2003-01-02 11:16
2003.01.13
Как определить висоту строки в RichEdit e, в пикселях?


6-37249
pdv
2002-11-09 11:09
2003.01.13
Как отключить инет на компе (инет подключен по локалке) ?


1-37053
-=KLEY=-
2003-01-03 00:27
2003.01.13
Запуск программ


1-37127
Сутковой Вадим
2003-01-04 15:11
2003.01.13
Удаление настроек (некоторых) из INI.


3-36968
Сергей Бушин
2002-12-14 17:58
2003.01.13
Поле AutoIncrement при вставке в ClientDataSet