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;
Treba pridať Unit, kde sa nachádza Form1 - u Teba zrejme Unit1... Pochopiteľne ,ak chceš odkazovať na nejakú triedu, objekt, premennú atď, ktorá sa nachádza inde
než je unit v ktorom odkazuješ...
No když odeberu s toho Form1(Unit1) s uses Unit2 a přidám do vlákna(Unit2) ,jak poradil pme, tak to funguje a mužů s vlákna přistupovat do Form1.
Když nechám ve Form1(Unit1) v uses Unit2 a ve vláknu(Unit2)bude v uses Unit1
tak mi delphi vyhodí [DCC Fatal Error] Unit1.pas(7): F2046 Out of memory.
Když s Form1(Unit1)odeberu Unit2 tak zas Form1 nevidí vlákno a tudíž ho s Form1 nemohu spouštět.
Nějak to mam poplantane
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.