Vlakna v Delphi (poradite uplnemu začatečnikovi)
Zdravím.
Včera jsem poprve začal s vlakny a zkoušim.
Thread vytvařim přes New Items - ThreadObject
Jak přečtu s vlakna informace třeba s Form1 s komponenty edit
Toto nefunguje.
procedure vlakno.Execute;
var a:string;
begin
a := Form1.edit1.text;
end;
Prostě potřebuji Form1 (Unit1), kde je button a edit.
Při kliknuti na button vytvořím a spustím vlákno, které je v Unit2 a je v něm kód co jsem tu už dával 2X
Pomužete prosím.
daj sem kompletny program (taky stav ktory sa da prelozit) a napis ze co nefunguje
P.S. nemusis uplne kompletny ale vsetky deklaracie a ten pristup ze jak robis alebo c oti nejde
Takže chceš z Unit1 používať Unit2 (kvôli spusteniu vlákna) a z Unit2 chceš používať Unit1 (kvôli prečítaniu hodnoty z TEdit). Z toho ti vznikne kruhová referencia medzi unitmi, čo ti kompilátor nedovolí.
Preto to musíš vymyslieť tak, aby to nebolo takto vzájomne závislé. Resp. mohol by si to dať do jednej unity a použiť forward deklaráciu, ale to by bolo zbytočne neprehľadné.
ThreadObject je objekt, ktorý vytváraš vo Form1. Takže najjednoduchšie bude, keď pri inštancovaní objektu pošleš do konštruktora hodnotu z toho TEditu, napr. vlakno.Create(Form1.edit.text, CreateSuspended). V konštruktore thread objectu si ju zapamätáš v členskej premennej a následne ju použiješ vo vlakno.Execute.
Samozrejme, že dovolí...
Aha, áno, keď to dá do implementation, tak mu to dovolí.
Edit: Ale aj tak bude lepšie to oddeliť, inak tam bude zbytočná závislosť.
Pro MM: Není kompletní program, jen se učím a zkouším
Pro los: píšete ‘’’ mohol by si to dať do jednej unity’
Vlákna, které jsou v jedné unit jsem zvládl, i vlákna ve funkci.
Rad bych i toto vyřešil a uměl.
Nevím jak u Vás ale tady venku chčije.
Neměl by někdo čas udělat nějaký malý přiklad.
Form (Unit1), kde bude button a třeba edit.
Při kliknuti na button by se spustilo vlákno, které je v Unit1 a třeba zapsalo něco do toho editu.
Pro profika bych řek brnkačka na par minut, ne.