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

Thread i Task, razlike i upotreba

[es] :: Pascal / Delphi / Kylix :: Thread i Task, razlike i upotreba

Strane: 1 2 3

[ Pregleda: 6312 | Odgovora: 41 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Thread i Task, razlike i upotreba12.02.2017. u 16:36 - pre 86 meseci
@FranjoZG Nisam opet ovo shvatio za progressbar gde ga kreiras, ako je u threadu to ne valja. Ako ti do sada nije pucalo, samo si imao srece.
Sam windows po sebi dozvoljava da se kontrole prave i u threadovim ali tada je taj thread vlasnik tog handla i u tom slucaju je sigurno da se ta kontrola koristi u tom thredu, ako se koristi iz vise threadova moze ali i ne mora doci do problema, to zavisi od nacina upotrebe. VCL je koncipiran tako da se ceo GUI nalazi u MainThreadu zato se za VCL kaze da nije threadsafe. Pristup sa synchronize je siguran ali je prilicno spor i neefikasan, ja u tu svrhu koristim poruke, npr. imam neki worker thread koji nesto radi i onda rezultate (ili progress) treba da prikaze korisniku, sve kontrole su uvek napravljene u glavnom threadu a pomocni thread samo salje poruke (sa PostMessage) koje onda glavni thread prihvata i prikazuje rezultate.

@tkaranovic
Primer koji si dao je delimicno threadsafe, naime jedan ShowMessage (koji je interno VCL forma) se nalazi van Synchronize i zato nije threadsafe, drugi ShowMessage je siguran jer je u okviru Synchronize. Sam primer po sebi ce skoro sigurno raditi bez problema jer je jednostavan pa ni prvi ShowMessage nece praviti probleme ali strogo gledano to nije dobar nacin programiranja. Ako je potrebno prikazati nesto korisniku onda treba koristiti WinAPI MessageBox funkciju koja je threadsafe.

Vecina baza dozvoljava multithread pristup, tako da je sasvim normalno i dozvoljeno da vise threadova istovremeno pristupa bazi, cita i pise podatke. Neke baze imaju i multithread podrsku za kverije sto znaci da komplikovne kverije one mogu podeliti na manje segmente od kojih ce se svaki izvrzavati na jednom coru procesora sto opet znaci da ce rezultati biti brzi. Ako nema podrsku onda to znaci da jedan kveri se izvrzava na jednom procesoru pa ce stoga biti i sporiji. Prednosti deljenja kverija su posebno evidentni na serverskim masinama sa velikim brojem jezgara. Firebird to nema pa je stoga sporiji od vecih baza za neke komplikovane stvari. Sto se tice Delphija, bazama se pristupa preko komponenti, neke komponente su threadsafe i tad mozes da radis sta hoces i odakle hoces. Vecina je threadsafe uz uslov da se svi resursi naprave i koriste u jednom threadu, dakle ako uspostavis posebnu konekciju ka bazi, transakciju, kveri u jednom thredu i sa njima radis samo iz tog threada si potpuno siguran. Da li radis to u threadu ili TTasku je pitanje afiniteta ali su oba slucaja sasvim OK i tu nema zastoja ili cekanja sto se tice same baze (ne racunam na cekanje baze za shared resurse tipa disk, memorija), ako se previse koristi Synchronize posebno ako u petlji kojom se obradjuju slogovi onda ce to naravno biti usko grlo, ali ako se to uradi lepo, prvo sve obradi pa salju podaci glavnom threadu onda tu nema nikakvih problema.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Thread i Task, razlike i upotreba12.02.2017. u 17:20 - pre 86 meseci
> Primer koji si dao je delimicno threadsafe, naime jedan ShowMessage (koji je interno VCL forma)
> se nalazi van Synchronize i zato nije threadsafe, drugi ShowMessage je siguran jer je u okviru Synchronize.
> Sam primer po sebi ce skoro sigurno raditi bez problema jer je jednostavan pa ni prvi ShowMessage nece
> praviti probleme ali strogo gledano to nije dobar nacin programiranja. Ako je potrebno prikazati nesto
> korisniku onda treba koristiti WinAPI MessageBox funkciju koja je threadsafe.

To je primer sa linka koji si ti dao. Ja sam samo prosirio primer.

Taj primer radi u XE7, a ako pogledas kako tamo radi showmessage videces da je threadsafe.



> Vecina je threadsafe uz uslov da se svi resursi
> naprave i koriste u jednom threadu, dakle ako uspostavis posebnu konekciju ka bazi, transakciju, kveri u
> jednom thredu i sa njima radis samo iz tog threada si potpuno siguran.

Sa ovom recenicom se potpuno slazem :)
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Thread i Task, razlike i upotreba12.02.2017. u 19:39 - pre 86 meseci
> To je primer sa linka koji si ti dao. Ja sam samo prosirio primer.
> Taj primer radi u XE7, a ako pogledas kako tamo radi showmessage videces da je threadsafe.

ShowMessage threadsafe? Ako je Vista ili vise i ako je setovan UseLatestCommonDialogs onda ce se koristiti TaskDialogIndirect API funkcija. Za nju ne znam da li je threadsafe, pretpostavicu da vazi standardno da se mora koristiti iz threada u kome je napravljena. Kako ima ima i neke callbackove koji ce verovatno zavrsiti u glavnom threadu a i sama funkcija koristi Application (koji nije threadsafe), bez detaljnog istrazivanja ne mogu biti skroz siguran ali ja ne bih nju koristio. Svakako ako negde u Delphi helpu daju primer sa ShowMessage u threadu van Synchronize to je greska zato sto sigurno ne radi na WinXP ili kad se resetuje UseLatestCommonDialogs.

 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Thread i Task, razlike i upotreba12.02.2017. u 19:39 - pre 86 meseci

> Taj primer radi u XE7, a ako pogledas kako tamo radi showmessage videces da je threadsafe.

Ovo naravno nije tacno... da neko ne pomisli da jeste ;)
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Thread i Task, razlike i upotreba12.02.2017. u 19:40 - pre 86 meseci


Sad vidim da smo istovremeno poslali poruku :)
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

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



+4 Profil

icon Re: Thread i Task, razlike i upotreba12.02.2017. u 23:20 - pre 86 meseci
Moj stari D2007 program:
- Progress bar kreiram u threadu i koristim ga samo u tom threadu jedino što se prikazuje na main formi.
- svaki thread (njih 6) kreira svoju konekciju na bazu kao qry za pristup bazi, onoj lokalnoj (FB) i onoj na web-u (MySQl). nisam imao problems s tim, radi nekoliko godina ispravno uz ponekad grešku pristupa web bazi pa sam ugradio provjere, te kad ne prođe, tj. javi milo koju grešku ponavljam taj prijenos (ponovno kreiram thread) i tako 5 puta, pa ako u 5 puta nije odradio posao, upišem u log i odustanem. Ka se svi thread-ovi završe, zatvarm program.

Savkić, kako si napisao u trečem odlmku, tako radim s bazom. Čitam da FB 3 će moči koristiti više procesora, treba probati. Budući da ne mogu sa FB3 klijenotm pristupiti na FB 1.5, ostaje za neka druga vremena...

Sa klasom tThread u D2007 mi to sve skupa radi. U XE7 sam pročitao za parallel programing, pa reko da probam. Izgleda da to stvarno nije za kompliciranije stvari. Probat ću još izbaciti korištenje objekata u tTask-u te sve prepisati u preocedure pa onda njih pozivati iz tTask-a.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Thread i Task, razlike i upotreba13.02.2017. u 06:46 - pre 86 meseci
Onda svaki thread im svoju konekciju na FB server.
Ako je tako onda je to isto kao da se razliciti programi povezuju na FB server.

Pretpostavljam da se iz lokalne FB (preko servera) samo citaju a ne i upisuju.
Jer ako bi se upisivali sa jednim threadom (jednom ili prvom konecijom),
onda ne bi mogli da se procitaju upisani podaci sa drugim threadom (odnosno drugom konekcijom).
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.adsl.net.t-com.hr.



+4 Profil

icon Re: Thread i Task, razlike i upotreba13.02.2017. u 08:51 - pre 86 meseci
U lokalu bazi se iz thrad-a i upisuju podaci, setiraju se statusi prijenos: datum, status koji se koriste pri sljedećem pokretanju kako se ne bi prenosila cijela tablica već samo mijenjani podaci.
Sam rad s bazom FB 1.5 nije ništa brži s thread-ovima on onoga bez njih, ali se dobije na ukupnom poslu koji program odradi jer se vrti paralelno i ne čeka jedan na drugi (provjereno):
- čitanje iz lokalne baze
- obrada. Dio je čisti prijenos podataka na web, a dio je obrada koja kombirnira više tablica te računa koješta.
- slanje na web

Starim programom sam zadovoljan kako radi mada bih ga napisao ponovo jer je vremenom više puta proširivan i prerađivan pa mi kod ne izgleda lijepo (ko da ga netko vidi :) ), neke stvari bih drugačije napravio, a tTask mi je izgledao primamljivo. Kako stvari stoje, ostat ću pri klasi Thread, ali u XE7.

Kad bi si netko dao truda pa napisao kuharicu za krištenje Thread-ova i Task-a... ali ne ono što se može pronaći po net-u jer su u principu jednostavni primjer ("Hello word"), a to baš i nije od pomoći kad upadneš u probleme.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Thread i Task, razlike i upotreba13.02.2017. u 09:45 - pre 86 meseci
U vezi threadova nisam imao primedbu, nego me samo interesoavalo kako rade.
Tako kako rade (koliko sam razumeo korake), startuju se i procidaju podatke, razmene sa webom i upisu, a onda prestanu sa radom je OK.
Tako i treba da rade zajedno, mene ja samo zanimao kako tacno.

Sto se kuvara tice i ja bi ga rado citao :)
Inace moj vikend je prosao...
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Thread i Task, razlike i upotreba13.02.2017. u 21:05 - pre 86 meseci
> Progress bar kreiram u threadu i koristim ga samo u tom threadu jedino što se prikazuje na main formi.

To je greska, nista sto se tice GUI kontrola ne sme u thread, kreiranje nije izuzetak. U jednostavnim slucajevima to ce biti OK ali pre ili kasnije u nekom programu ces poceti da dobijas random AV.

> Savkić, kako si napisao u trečem odlmku, tako radim s bazom. Čitam da FB 3 će moči koristiti više procesora,
> treba probati. Budući da ne mogu sa FB3 klijenotm pristupiti na FB 1.5, ostaje za neka druga vremena...

Uradili su podrsku za SMP, to u principu znaci da delovi koji se izvrsavaju na vise procesora mogu da koriste isti kes, bice boljitak u super server arhitekturi, za classic mislim da ne.

> Sa klasom tThread u D2007 mi to sve skupa radi. U XE7 sam pročitao za parallel programing, pa reko da probam.
> Izgleda da to stvarno nije za kompliciranije stvari. Probat ću još izbaciti korištenje objekata u tTask-u te sve prepisati
> u preocedure pa onda njih pozivati iz tTask-a.

TTask nije sigurno problem, ako dobijas AV to znaci da imas neki race condition izmedju threadova, da li je to zbog VCL kontrola, pristupa bazi ili nesto trece je tesko reci.

> Pretpostavljam da se iz lokalne FB (preko servera) samo citaju a ne i upisuju.
> Jer ako bi se upisivali sa jednim threadom (jednom ili prvom konecijom),
> onda ne bi mogli da se procitaju upisani podaci sa drugim threadom (odnosno drugom konekcijom).

FB/IB imaju jednu odlicnu osobinu zbog svoje MGA arhitekture da mozes napraviti transakciju (kveri) koja vidi sve promene cim se komituju a ne zauima nikakve resurse (ne utice na probleme zbog zaostalih OIT/OAT). Ja obicno otvorim jednu takvu readonly transakciju na pocetku i drzim je uvek otvorenu i sva citanje (kad je to moguce) radim preko nje, mnogo zavisi od komponenti koji se koriste i da li one dozvoljavaju setovanje parametara transakcije. Uglavnom takva transkacija treba da ima sledece flegove:
read
read_committed
nowait
rec_version



 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Thread i Task, razlike i upotreba14.02.2017. u 10:31 - pre 86 meseci

> FB/IB imaju jednu odlicnu osobinu zbog svoje MGA arhitekture da mozes napraviti transakciju (kveri)
> koja vidi sve promene cim se komituju a ne zauima nikakve resurse (ne utice na probleme zbog
> zaostalih OIT/OAT). Ja obicno otvorim jednu takvu readonly transakciju na pocetku i drzim je uvek
> otvorenu i sva citanje (kad je to moguce) radim preko nje, mnogo zavisi od komponenti koji se
> koriste i da li one dozvoljavaju setovanje parametara transakcije. Uglavnom takva transkacija treba da ima sledece flegove:
> read
> read_committed
> nowait
> rec_version

Znam ja da ti to tako radis ;) (posto si napisao "Ja obicno otovorim..." :))
Ali to je jedna od transakcije u okviru iste konekcije.

Ovde je bila rec o vise threadova koji imaju svoje koneckije.
Odnosno, to sam ja tako zakljucio a Franjo nije demantovao.

Ako hoces da kazes da sve treba da ide preko jedne konekcije onda tako napisi.

U svakom slucaju tako kako rade vise konecija mogu da rade i rade.
Jedino je potrebno da u isto vreme ciatju ono sto je upisano u prethodnom radu.

Naravno, ja open nastavljam onako kako sam sam zakljucio da radi sa vise konekcija, a Frano nije npisao da ne radi tako.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.adsl.net.t-com.hr.



+4 Profil

icon Re: Thread i Task, razlike i upotreba14.02.2017. u 15:23 - pre 86 meseci
Svaki thread mi je kao zaseban program, sa svim što mu treba i radi neovisno o ostatku programa. Izuzetak je već opisani progressbar i klasa za parametre.

Imam definiranu klasu: tMyParam u kojoj su potebni parametri za rad: ime baze, user name, pass itd.
Svi parametri su definirani kao
class property
tako da ih jednom u programu postavim i vidim ih u svakom thredu. Ne mijenjam ih thread-u, samo čitam, ne kreiram objekt od te klase.

Kod starta programa upisujem parametre u klasu parametara i postavljam varijable (public u main-u):
Thread1Started := true
Thread2Started: = true
...

iz svakog threada, kao zadnju nardebu, pozivam proceduru u main formi s parametrom ImeThread-a
procedura indikator thread (prema parametru) postavi na false i provjerava da li su svi indikatori na false, ako jesu - gasim program (program se starta automatski svakodnevno u x sati).

Volio bih da se vratite na:

1. Razlika između tParallel i tThread
2. kreiranje objekta u tParallel i izvršavanje

Jel tko obečao napraviti upute za paralelno programiranje, korištenje thread-ova itd ? :)
Ovdje sam negdje skinuo uputstvo za kreiranje user kontrola (na želost ne sjećam se tko ga je napisao), pomoglo mi je više nego sav ostali net.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Thread i Task, razlike i upotreba14.02.2017. u 17:33 - pre 86 meseci
> 1. Razlika između tParallel i tThread

Mislis na TTask i TThread?

TTask je wrapper oko TThreada, utility klasa koja ti omogucava da neki kod izvrsis u threadu a da ne moras posebno izvoditi klasu, dakle u osnovi TTask skracuje vreme pisanja naspram direktno koriscenja TThreada. Sva pravila o threadsafe programiranju koja vaze za threadove vaze i za taskove.

> 2. kreiranje objekta u tParallel i izvršavanje

1) Nikad ne kreiraj VCL kontrole
2) Kreiraj sta god hoces ostalo uz opasku da moras voditi dodatno racuna ako ce se to sto si kreirao koristiti i u drugim threadovima, najbolje je da to sto si kreirao u thredu, iskljucivo i koristis u njemu.
3) TTask se izvrsava (postoji) dokle kod koji si napisao se ne zavrsi ili dok ga ti ne otkazes. Anonimna procedura (ili procedura) koju si naveo prilikom kreiranja TTaska je zapravo kod koji ce ici u Execute napravljenog threada.

> Jel tko obečao napraviti upute za paralelno programiranje, korištenje thread-ova itd ? :)

Bilo je tokom godina ovde govora o tome tu i tamo, mozda neki search pomogne, i naravno na netu se moze naci dosta toga na tu temu.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

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



+4 Profil

icon Re: Thread i Task, razlike i upotreba14.02.2017. u 22:08 - pre 86 meseci
Pitanje:
ako imaš više thread-ova koji upisuju u isti log file, obični text file. Gdje ga "uvaliti"? U main thread pa pozivati proceduru iz drugog threada ili u svakom threadu kreirati proceduru za upisu file?

Ako je proc. za upis u log file u main tread-u, tada mogu voditi računa da pričekam sa novim upisom dok stari nije završen.
Ako je u thread-u koji treba i upisati podatke, ne zna da li možda neki treči thrad pokušava upisati, neće li se tada možda "sudariti"?

Npr ovako za poziv procedure iz main thread-a:
Code:

type
  tProc= procedure(Tekst: string) of object;

  tMailThread = class(TThread)
  private
    { Private declarations }
    fLogProc: tProc;
  protected
    procedure Execute; override;
  public  
    property LogProc: tProc read fLogProc write fLogProc;
  end;


u main threadu kažem novom thread-u koja mu je to procedure:

Code:

...
      SendMailThread := tMailThread.Create(true);
      SendMailThread.Log := WriteLog;
      SendMailThread.Resume;
...

procedure MainFrm.WriteLog(Tekst: string);
begin
...
end;
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Thread i Task, razlike i upotreba15.02.2017. u 00:58 - pre 86 meseci
> ako imaš više thread-ova koji upisuju u isti log file, obični text file. Gdje ga "uvaliti"? U main thread pa
> pozivati proceduru iz drugog threada ili u svakom threadu kreirati proceduru za upisu file?
> Ako je proc. za upis u log file u main tread-u, tada mogu voditi računa da pričekam sa novim upisom dok stari nije završen.
> Ako je u thread-u koji treba i upisati podatke, ne zna da li možda neki treči thrad pokušava upisati, neće li se tada možda "sudariti"?

Kako doista upisujes stvari u fajl, da li TFileStream ili WinApi funkcije CreateFile/WriteFile?
TFileStream nism siguran da je threadsafe, ne bih se kladio, WriteFile jeste ako koristis asinhrono pisanje ali moze doci do mesanja sadrzaja ako ides sa sinhronim pristupom.
Sve u svemu, najsigurnije je da ti obezbedis threadsafe pisanje u log. Recimo napravis jednu globalnu funkciju
AddToLog(const AText: string) i dalje nju pozivas iz svih treadova. Najjednostavniji nacin da je zastitis je sa TCriticalSection.

 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.e-info.ba.



+62 Profil

icon Re: Thread i Task, razlike i upotreba16.02.2017. u 08:34 - pre 86 meseci
Log file: zar ne rece negde ranije da upis u log radis iz main thread-a, tako sto iz worker thread-a pozoves Synchronize(MetodaZaUpisULog)?

S ovim si resio problem, nema sudaranja/kolizije oko Log fajla. Synchronize() je nekad radilo preko poruka (SendMessage(), funkcija koja ceka obradu poruke). Losa strana je sto worker thread stoji dok MainThread ne odradi posao/poruku. Takodje, ukoliko MainThread iz nekog razloga stane (intenzivna obrada, dead loop ili slicno), svi worker thread-ovi ce stati na pozivu Synchronize().

Drugi nacin (moj omiljeni) je upravo predlozio Igor (savkic), a to je pisanje posebne threadsafe klase za upis u log file. Za ovo pogledaj klasu TThreadList u unit-u Classes (Delphi 7 ili raniji); nit manje klase nit mocnijeg koda ;); efektan primer kako se pravi threadsafe resurs.

Pozz
 
Odgovor na temu

salvaric
Novi Sad

Član broj: 53995
Poruke: 204
*.dynamic.isp.telekom.rs.



+4 Profil

icon Re: Thread i Task, razlike i upotreba16.02.2017. u 10:56 - pre 86 meseci
Što se tiče upisa u log fajl, i po meni je najbolja varijanta da napraviš zaseban thread za to.

U prilogu je jednostavan primer, koji kod mene radi bez ikakvih problerma i peripetija.
Nikad izvini!
Prikačeni fajlovi
 
Odgovor na temu

salvaric
Novi Sad

Član broj: 53995
Poruke: 204
*.dynamic.isp.telekom.rs.



+4 Profil

icon Re: Thread i Task, razlike i upotreba17.02.2017. u 12:51 - pre 86 meseci
Citat:
Log file: zar ne rece negde ranije da upis u log radis iz main thread-a, tako sto iz worker thread-a pozoves Synchronize(MetodaZaUpisULog)?

S ovim si resio problem, nema sudaranja/kolizije oko Log fajla. Synchronize() je nekad radilo preko poruka (SendMessage(), funkcija koja ceka obradu poruke). Losa strana je sto worker thread stoji dok MainThread ne odradi posao/poruku.


Ne bih se složio sa ovim rešenjem Synchronize() metode iz main thread-a za upis u log ili bilo koje druge metode, ne stoji samo worker thread dok se metoda ne izvrši, već stoji i main thread zamrznut, i čemu je onda poenta poziva iz thread-a, ako će korisnik čekati da worker odradi posao.
Nikad izvini!
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Thread i Task, razlike i upotreba17.02.2017. u 13:29 - pre 86 meseci

Salvaricu, tvoj log fajl ima 60 linija a pravis 100 threada. Nedostaje 40 linija?

Ti namerno pravis sum ili ne pratis radnju u ovoj temi?

Slicno tom tvom primeru bi bilo sa Synchronize().

Ono sto je Savkic napisao (TThreadList je isto to) to moze da predupredi.

 
Odgovor na temu

salvaric
Novi Sad

Član broj: 53995
Poruke: 204
*.dynamic.isp.telekom.rs.



+4 Profil

icon Re: Thread i Task, razlike i upotreba17.02.2017. u 14:04 - pre 86 meseci
Napustio si program pre nego što su svi thread-ovi bili izvršeni, nije zaštićeno sa te strane, tako da bi ispisao svih 100 da je main thread ostao malo duže živ.
Citat:
Slicno tom tvom primeru bi bilo sa Synchronize().

Bi, bilo u koliko se metoda nalazi u worker therad-u, a u koliko je u main thread-u, glavna forma bi bila zamrznuta dok se ne izvrši. Možda u ovom primeru kod upisa u log fajl išlo bi brzo, i nebi se ni primetilo, al neke malo zahtevnije metode bi zahtevale malo više vremena.
Nikad izvini!
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Thread i Task, razlike i upotreba

Strane: 1 2 3

[ Pregleda: 6312 | Odgovora: 41 ] > FB > Twit

Postavi temu Odgovori

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