mam sobie procedurkę zabezpieczającą jednoczesne użycie komponentu listbox przez dwa wywołania tej samej procedury (jest ona wywoływana przez server / client.socket) -> problem tkwi konkretnie w petli sprawdzajacej, czy komponent nie jest juz uzywany (jest to zapisane w globalnej tablicy boolean - tam sa tez inne zabezpieczone tak komponenty)... Najlepiej wyjasnie to na przykladzie:
Na formie siedza sobie 2 buttony i listbox... Do buttonow sa przypisane zdarzenia:
procedure TMainForm.Button1Click(Sender: TObject);
begin
while true do
begin
listbox1.items.add('1');
Application.ProcessMessages;
sleep(1000);
end;
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
while true do
begin
listbox1.items.add('2');
Application.ProcessMessages;
sleep(1000);
end;
end;
gdy klikam pierwszy button to co sekunde dodaje sie item 1, a gdy klikne button 2 to juz sie dodaje tylko 2, a jedynka zdechla :-/
slyszalem jednak, ze sleep zawiesza program, wiec napisalem wlasnego sleepa:
procedure wait(const timeout:integer);
var
start:integer;
begin
start := czas;
while (czas < start+timeout) do Application.ProcessMessages;
end;
co niestety NIC nie dało ;(.
z gory thx za jakakolwiek pomoc...
EDIT: jeszcze zapomnialem o jednym: zmienna czas jest globalna i zwieksza sie co 1 sekunde o 1 (wstawilem komponent Timer na forme).