[ reiser @ 10.03.2005. 23:46 ] @
Moze li neko da objasni kako da iz jedne funkcije/procedure koju pozivam sa BeginThread() mogu da menjam parametre VCL kontrola ? Recimo, da u Memo-u dodam neki text. Hvala |
[ reiser @ 10.03.2005. 23:46 ] @
[ vlaiv @ 11.03.2005. 18:15 ] @
Mislim da su zbog ovog razloga i ubacili TThread objekt .... koji ima synchronize metodu ...
Mozes ako bas neces da radis sa TThread-om da pokusas sledece: Postavis TTimer komponentu ili napises OnIdle event (koji u sebi ima neki sleep i vraca false da bi se ponovo izvrsio) Iz threadfunc-a neke globalne varijabile postavis na odredjene vrednosti (naravno zasticeno nekim mehanizmom za lockovanje) a iz ttimer.ontimer eventa citas status globalnih varijabli (opet zasticeno mehanizmom za lockovanje) i ako se stanje promenilo update-ujes property-je vcl komponente. captionchange:boolean; newcaption:string; ... ... .. newcaption:='bla bla'; captionchange:=true; ... ... ... if captionchange then begin Label1.caption:=newcaption; captionchange:=false; end; [ reiser @ 11.03.2005. 23:33 ] @
Hvala, ali ipak bi zeleo da mi neko objasni kako da uradim ovo preko BeginThread(). Pravim jedan program koji treba da u pozadini iz jednog fajla iscita neke podatke, i onda da startuje 10-tak programa, jedan po jedan, i na kraju da upise u fajl rezultat.
[ vlaiv @ 13.03.2005. 22:12 ] @
Nisam siguran da razumem ...
Aj ako hoces pojasni tacno sta treba pa da probamo pomoci .... Nije mi bas jasno sta ce ti vcl komponente da bi citao i pisao u fajl i sl ... i kakvih je to 10 programa? potprograma (procedure) ili ih kreiras kao procese i uzimas njihovu povratnu vrednost nakon izvrsavanja? [ Srki_82 @ 13.03.2005. 23:16 ] @
Samo ti koristi TThread clasu. Ona u pozadini poziva BeginThread umesto tebe. Tvoje je samo da napises Execute funkciju (to je funkcija koja se pokrece kad TThread pozove BeginThread) i uzivaj. Kad ti treba nesto od VCL komponenti imas funkciju Synhronze koja sinhronizuje tvoj nov thread sam main thread i onda upisuje podatke za vcl. Pogledaj malo help u Delphiu za TThread. Koliko se secam imas cak i Wizard za kreiranje thread klasa u Delphi 7... mozda i u starijim.
[ reiser @ 14.03.2005. 00:29 ] @
Pravim jedno programce koje ce se pozivati iz kontekst menija. Kad se programce startuje, kao parametar ce mu biti prosledjena putanja do neko fajla. Ono treba prvo da otvori fajl av.lst u kome se nalaze putanje do anti virusa i jos neke informacije, rasporedi te podatke u array i svaki av koji je naveden u fajlu startuje i odskenira fajl koji je prosledjen kroz parametar. Na kraju treba da sastavi report koji ce zapisati u neki fajl.
Cim se fajl odskenira prvim av-om, u memo-u treba da se doda jedna linija sa izvestajem sta je taj av nasao. Nesto slicno kao na virustotal.com. Zato mi i treba komunikacije thread <> kontrola. Probacu ovako kako Srki kaze, mada nesto ne fercera. Lepo bi bilo da neko objasni kako da odradim Synchronize iz threada kreiranog sa BeginThread(). poz [ neor @ 14.03.2005. 07:52 ] @
Ne znam zasto izbegavas TThread ali ako bas moras bez njega onda ce verovatno biti dovoljno da svako mesto u kodu gde radis sa VCL komponentom kojoj pristupa vise threadova ogradis sa EnterCriticalSection(CriticalSection) i LeaveCriticalSection(CriticalSection), u Initialization obavezno uradis InitializeCriticalSection(CriticalSection), a u Finalization stavis DeleteCriticalSection(CriticalSection).
CriticalSection je tipa TRTLCriticalSection; [ reiser @ 14.03.2005. 18:34 ] @
Ma nije mi problem da radim preko TThread klase nego nikako nemam vremena da procackam help po netu i delphiiju da vidim kako se radi sa ovime... Tnx na odgovorima, pokushacu sa TThread da odradim.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|