Форум: "WinAPI";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
ВнизУниверсальный Thread !!! Найти похожие ветки
← →
Maksim (2002-07-06 12:28) [0]Доброго времени суток всем!
Есть задача создать универсальную процедуру с помощью которой можно будет запускать любую функцию или процедуру в отдельном потоке, что то вроде
MyUniversalThread(ListView1.Clear);
MyUniversalThread(LoadList);
LoadList тоже какая нить долгая процедура к-рая тормозит всю прогу.
Мои долгие попытки ни к чему не привели, и вот обращаюсь к вам Мастера.
Заранее благодарен.
Максим.
← →
MBo (2002-07-06 12:42) [1]MyUniversalThread(ListView1.Clear);
Так нельзя. Действия с Control-ами должны выполняться только в основном потоке.
← →
asmer (2002-07-06 15:04) [2]-= for MBo =-
потоками можно работать с контроллами, созданными с вин32апи... а VCL не имела изначально свойство повторной входимости, однако с эндцатой версией (не помню, по-моему с четвёртой) есть какие-то средства синхронизации, позволяющие реализовывать многопоточность с VCL-функциями... типа, я на делфи щас не пишу, поентому не помню конкретно ентот вопрос, помню только, что енто проблематично... :) а прочитал об ентом в здоровом двухтомнике про делфи, названия и автора тож не помню :) типа, просто для сведения грю, практической пользы с моего текста - NULL... :)
← →
MBo (2002-07-06 15:36) [3]>asmer
Весьма благодарен за полную и ценную информацию.
Составители французской энциклопедии спросили Ж.Кювье (известный биолог-систематик)- как вам наше определение:
Рак- это небольшая красная рыба, которая ходит задом наперед.
Кювье ответил: Определение великолепное, есть только мелкие замечания - рак не рыба, он не красный, и не ходит задом наперед.
Все остальное точно.
← →
asmer (2002-07-06 15:51) [4]мбо -> не в тему...
хех, чувствуется, удалит меня модератор :)
← →
serd_hhc (2002-07-06 18:27) [5]2MBo>
Шорошо сказано...
← →
asmer (2002-07-07 07:32) [6]Действия с Control-ами должны выполняться только в основном потоке
...а я грю, что можно не в основном!.. неужели енто аналогично ответу кювье?.. может, у вас какая-то особая, "программистская", логика?..
← →
MBo (2002-07-07 12:17) [7]http://www.pergolesi.demon.co.uk/prog/threads/Ch3.html
← →
Bachin (2002-07-07 14:39) [8]не ссорьтесь горячие парни! :)
type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Add100000Items;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Add100000Items;
var
i: integer;
begin
for i := 0 to 99999 do
Form1.ListView1.AddItem( IntToStr(i), Nil );
end;
procedure TForm1.Button1Click(Sender: TObject);
var
p: Pointer;
t: Cardinal;
begin
p := MakeProcInstance( @TForm1.Add100000Items, 0 );
CreateThread(Nil, 0, p, Nil, 0, t);
FreeProcInstance(p);
end;
end.
← →
asmer (2002-07-07 15:14) [9]Bachin -> тока вот енто просто так, видимо, иногда будет выдывать ошибки... если, например. ты кнопку второй раз нажмёшь не вовремя, или каким-нить ещё способом попытаешься повлиять на содержимое ListView1... я ж грю, в библиотеке есть какие-то средства синхронизации, позволяющие многопоточность, но сами по себе они не работают...
← →
Bachin (2002-07-07 15:56) [10]2asmer>
Я не понял вопроса! В чем проблемма то?
одновременный доступ к объекту? так при чем здесь VLC!?
я так понял, что обновная проблема была запустить в
потоке функцию объекта, а не обычную.
Как это делается я написал, а синхронизацию НИКТО
за тебя не сделает... Тут как говорится и флаг в руки -
хочешь критикал секции делай, хачешь - заведи свою переменную :)
← →
[NIKEL] (2002-07-07 18:04) [11]для того чтоюы позволить потокам доступ к объектам библ. VCL , в объекте TThread предусмотрен метод Synchronize , он выполняет действи, которые находятся в подпрограмме так, как если бы они выполнялись из основного потока VCL...
может поможет...
← →
Новенький в Делфи (2002-07-08 01:44) [12]... ээ я не много по борзею... и в лезу в разговор мастеров :)
Насколько я понял вопрос, он заключался в том что бы создать универсальную процедуру, которая бы запускала другие баальшие процедуры в отдельном потоке (хотя я смысла в этом не вижу).
Но Synchronize() тут не подходит.. так как этот метод будет выполнять другие процедуры в основном потоке, тоесть смысл отдельного потока исчезает.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c