![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TThread [D5]
lipskiy © (2002-03-20 20:32:00)Почему нельзя параметром Synchronize указать процедеру с параметрами? Это очень неудобно - нужно работать через глобальные переменные. Почему? Нельзя ли все таки сделать вызов с параметрами?
Набережных С. (2002-03-20 22:05:00) [1]Я тоже извиняюсь - зря написал.
vuk (2002-03-20 21:59:00) [2]to Набережных С.:
>"Другим путем" - в каком смысле?
Звиняюсь, проглядел. :o(
Ну да хуже от этого никому не стало. :o)
Набережных С. (2002-03-20 21:55:00) [3]
> vuk © (20.03.02 21:48)
"Другим путем" - в каком смысле?
См. > Другой вариант - буфер с синхронизацией
lipskiy (2002-03-20 21:53:00) [4]Черт, хорошо быть умным...
Не понимаю я этого всего... (пока)
Ну да ладно, спасибо и на том, буду разбираться.
Просто мой уровень ниже изложенных вами предложений.
vuk (2002-03-20 21:48:00) [5]Не знаю, кто как, но я бы пошел совсем другим путем. Правда, немного сложнее получается.
Все параметры, которые нужны форме для отображения результата упаковываются в структуру (запись или объект). Потом создается список (TThreadList), который служит "буфером" и в который поток складывает результаты своей работы. Также у потока есть Handle формы, которой он посылает сообщение сразу как только добавляется элемент в список. Форма же, получив сообщение, выбирает элементы из списка, отображает их и затем удаляет.
Набережных С. (2002-03-20 21:31:00) [6]Выделяй динамически память под структуру или переменные и указатель отсылай через SendMessage, PostMessage или Synchronize.
Другой вариант - буфер с синхронизацией. Есть и другие варианты, например COM.
lipskiy (2002-03-20 20:50:00) [7]Кхм... Это понятно.
Но вот, в моем случае все выглядит примерно так.
В Execute выполняется довольно длинный неразветвленный и нециклический код. Просто последовательность операций. Между этими операциями мне нужно печатать результат на главную форму. Естественно, эти промежуточные результаты возникают только внутри Execute.
Так что делать в этом случае?
Юрий Зотов (2002-03-20 20:44:00) [8]Потому что так сделано. А глобальные переменные совершенно не обязательны. В хелпе есть пример.
procedure TMyThread.MyMethod;
begin
AnyMetod(AnyParamList); // Вот оно - любой список параметров
end;
procedure TMyThread.Execute;
begin
...
Synchronize(MyMethod);
...
end;