Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Task, kada je završen

[es] :: Pascal / Delphi / Kylix :: Task, kada je završen

[ Pregleda: 1553 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.dsl.iskon.hr.



+4 Profil

icon Task, kada je završen16.01.2016. u 13:05 - pre 99 meseci
Radim sa Delphi XE7

U Ovom delphi-u je pojednostavljen rad sa TTaskom, ali sam shvatio da imam problem s odgonetavanjem da li je taks završio ili nije...

na proc. main forme:
OnClseQuery imam provjere i gašenje task-ova ako su još aktivni:
Code:

   if (fTaskUpdate <> nil) and (fTaskUpdate.Status = TTaskStatus.Running) then 
       fTaskUpdate.Cancel;



i nakon toga:
Code:

   while (fTaskUpdate <> nil) and (fTaskUpdate.Status = TTaskStatus.Running) do Sleep(1000);


na provjeri taksa mi javlja "Access vi...." i to ako je task završio svoj posao. Mislim da je i očekivano jer je pozvao svoj Destroy.

Kako znato da je task još uvijek aktivan? Pada mi na pamet korištenje varijable u main-u koju bih setirao true/fasle u Create i Destroy task-a.
Ima li bolji način?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Task, kada je završen16.01.2016. u 13:26 - pre 99 meseci
> na provjeri taksa mi javlja "Access vi...." i to ako je task završio svoj posao. Mislim da je i očekivano jer je
> pozvao svoj Destroy.
> Kako znato da je task još uvijek aktivan?

Preko Statusa je mislim preporučeni način, ali nisam siguran da su promenljive na njih predvidjene da budu globalne.
Obično je da ga napraviš u nekoj metodi i startuješ i onda ili čekaš da završi ili prosto i ne čekaš.

> Pada mi na pamet korištenje varijable u main-u koju bih setirao true/fasle u Create Destroy task-a. Ima li bolji način?

Mozes koristiti Evente za to.
A zašta će ti informacija da li je završio, kad to koristiš?
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.dsl.iskon.hr.



+4 Profil

icon Re: Task, kada je završen16.01.2016. u 14:21 - pre 99 meseci
Pokrenem task za update podataka (local <->web) koji se vrti ispod tako da program može raditi jer sinhronizacija podataka traje duže vrijeme.

Što ako korisnik želi napustiti program prije nego je završila sinhronizacija? Za samu sinh. nema uticaja jer sam provjere taks.canceled stavljao tamo gdje prekidi ne ometaju proceduru.

Pokušao sam clos-ati program, a da ne obračam pažnju na tasko-ove. Ne valja - javlja grešku...
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Task, kada je završen16.01.2016. u 17:13 - pre 99 meseci
> Što ako korisnik želi napustiti program prije nego je završila sinhronizacija? Za samu sinh. nema uticaja jer sam provjere
> taks.canceled stavljao tamo gdje prekidi ne ometaju proceduru.
> Pokušao sam clos-ati program, a da ne obračam pažnju na tasko-ove. Ne valja - javlja grešku...

Koju grešku?
Taskovi su u osnovi metode koje se izvršavaju u posebnom threadu, a dodatne threadove sistem sam uništi ako ti to ne učiniš. Ja obično na izlasku iz programa čekam do 1s na thread i ako još nije završio samo nastavim sa izlazom a sistem sam počisti. I kod tebe bi nesto tako trebalo biti slucaj kad izlazis iz programa.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.dsl.iskon.hr.



+4 Profil

icon Re: Task, kada je završen16.01.2016. u 21:55 - pre 99 meseci
Riješio sam problem...
1. ja sam griješio jer sam pomješao objekt klase tthread (Delphi 10) i tTask u XE7, a u kom sam kreirao objekt svoje klase, pa se malo spetljah....
2. da li je task završen ili nije, utvrđujem s varijablom iz main forme:
na početku taska: Inc(Var)
na kraju taska: Dec(var)
kod closanja forme provjeravam da li je Var = 0
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
188.124.211.*



+62 Profil

icon Re: Task, kada je završen18.01.2016. u 10:49 - pre 99 meseci
Da li taj Var (otkud da varijablu nazoves po sluzbenoj reci?) inkrementujes/dekrementujes iz samog taska?
Ako DA, i ako imas vise taskova, onda koristi InterlockedIncrement i InterlockedDecrement API funkcije; osiguravaju threadsafe pristup argumentu funkcije.

Pozz
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.dsl.iskon.hr.



+4 Profil

icon Re: Task, kada je završen24.01.2016. u 17:36 - pre 99 meseci
Increment varijable radim u task-u. Na početku i na kraju pa provjeravam je li parna
Trebao bih inc - dec pa pa provjeriti je li 0. sad kad pišem post - ne sječam se zašto nisam tako radio i zašto sam zaključio da je bolje inc - inc :)

- nije Var, samo sam napisao kao primjer.
- da korisim InterlockedIncrement

tako sada radi OK.

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Task, kada je završen

[ Pregleda: 1553 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.