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

Вниз

Вопрос по потокам   Найти похожие ветки 

 
XShura   (2002-06-18 14:22) [0]

Всем привет! Возник вопрос по синхронизации потоков :
Имеем главную форму, где расположен TListView :

TfmGlav = class(TForm)
List1: TListView;
Image1: TImageList; // иконки для ListView
...
end;

и есть вторичный поток :

TTh = class(TThread)
private
{ Private declarations }
fList:TListView;
protected
procedure Execute; override;
public
constructor Create(List:TListView);
destructor Destroy; override;
end;

implementation

constructor TTh.Create(List:TListView);
begin
inherited create(true);
fListGr:=ListGr; // присваиваем FList указатель на TListView главной формы
resume;
end;

procedure TTh.Execute;
begin
repeat
sleep(10);
fList.Items[0].ImageIndex:=3; // обращение к свойству List1.ImageIndex первичного потока
sleep(10);
fList.Items[0].ImageIndex:=0;
sleep(10);
until Terminated;
end;

вопрос : насколько корректен код в методе Execute и надо ли
использовать метод Synchronize ?
И еще, если мой код некорректен, то как мне заставить программу "глюкнуть"
в этом методе, так как данный код работает без всяких коллизий.


 
_Antiox_ ©   (2002-06-18 14:33) [1]

Синхронизировать надо конечно!
Коллизии возникнут, если у тебя несколько потоков будут работать с одним и тем же ресурсом без синхронизации.
Т.к. в коде присутствуют sleep() - это уменьшает вероятность коллизии, но это не выход.
Дело в том, что даже убрав все sleep-ы и запустив множество потоков программа может и не "глюкнуть" явно (т.е. не будет AV и т.д.), но логика программы может быть нарушена.



 
XShura   (2002-06-18 14:50) [2]

Спасибо что откликнулся!
Из твоего ответа я понял, что нет никаких средств отследить такие коллизии кроме как ждать и ждать ....


 
[aka]   (2002-06-18 15:33) [3]

Зачем ждать, создай десять таких струн и сразу увидишь как весело будет с ListView ;)
Хотя зависит от логики - если остальному коду неважно, какая там иконка, то юзверю и подавно :)



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

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

Наверх




Память: 0.47 MB
Время: 0.01 c
1-1052
Донской
2002-06-16 17:17
2002.07.01
Мастера, подскажите, пожалуйста - не могу понять, откуда этот глю


1-968
MikeFW
2002-06-20 09:17
2002.07.01
Два TreeView. Как переносить данные из одного дерева в другое


6-1132
Chris
2002-04-20 13:36
2002.07.01
Какой PPP Server посоветуете?


3-890
DKalinin
2002-06-07 12:10
2002.07.01
ADOQuery закрываться не хочет если select ничего не вернул


8-1116
Digitman
2002-02-24 14:26
2002.07.01
Всем интересующимся цифровой обработкой сигналов !!!