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

Izvrsavanje u pozadini... Kako ?

[es] :: Pascal / Delphi / Kylix :: Izvrsavanje u pozadini... Kako ?

Strane: 1 2

[ Pregleda: 4971 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Izvrsavanje u pozadini... Kako ?10.10.2004. u 15:08 - pre 237 meseci
Program treba da izvrsi jednu operaciju koja ce trajati duze vreme... Koji je najboji nacin da napravim da se to izvrsava a da program i dalje nesmetano radi druge zadatke. (osim Application.ProcessMessages i Application.OnIdle)...
CreateThread ?
 
Odgovor na temu

vladab
Vladimir Bašanović
Beograd

Član broj: 9512
Poruke: 498
*.vdial.verat.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?10.10.2004. u 17:08 - pre 237 meseci
Imas TThread klasu...file|new|other|thread object... Ja sam pravio da mi muzika ide u pozadini i radilo je ok.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 15:46 - pre 237 meseci
Postoji li neki drugi nacin ???
 
Odgovor na temu

Slavisa
Slavisa Dojcinovic
JKP Cistoca
Banjaluka

Član broj: 9861
Poruke: 44
*.teleklik.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 17:39 - pre 237 meseci
Mozes da koristis CreateThread() funkciju.
Prvo napises funkciju koja ce se izvrsavati u posebnoj niti.

var
ThreadId : Cardinal;

function ThreadProc(p : Pointer) : DWORD; stdcall;
begin
while TRUE do
begin
Sleep(100);
end;
end;

Zatim pozoves CreateThread() i predas pokazivac na ThreadProc().

CreateThread(nil, 0, @ThreadProc, nil, 0, ThreadId);

Obrati paznju da iz ThreadProc ne mozes kontrolisati korisnicki interfejs bez neke sinhronizacije jer vecina VCL klasa nije thread safe.


Slavisa
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 18:26 - pre 237 meseci
Meni se podize debugger i javlja access violation gresku... Gde gresim ??? Inace, ThreadProc funkcija poziva jos nekoliko sporednih funkcija koje se sadrze u kodu... ?
 
Odgovor na temu

Slavisa
Slavisa Dojcinovic
JKP Cistoca
Banjaluka

Član broj: 9861
Poruke: 44
*.teleklik.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 18:37 - pre 237 meseci
Pretpostavio sam

Pokusaj prvo da u ThreadProc() stavis neko jednostavno procesiranje recimo

while TRUE do
begin
MessageBox(0, 'hehehe', 'hehehe', MB_OK);
Sleep(2000);
end;

To bi trebalo da radi bez gresaka.
Imaj u vidu da iz ThreadProc() ne mozes da uradis nesto tipa
Form1.Edit1.Text := 'blablabla';
jer ce to izazvati AccessViolation. Moras implementirati neki tip sinhronizacije
ili koristiti Win API za komuniciranje sa kontrolama forme.
Najbolje da zalijepis ovde tu ThreadProc()


Pojasni malo sta tacno hoces da izvrsavas u pozadini. Neki upit nad bazom podataka ili sta ?


Slavisa
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 19:15 - pre 237 meseci
Nikakav upit, vec dekriptovanje fajla (pravim exe protector)... Aplikacija je konzolnog tipa... Funkcija poziva nekoliko razlicitih decrypt procedura...
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 21:02 - pre 237 meseci
E ovako, ponekad (retko kad) izbacuje gresku 'Invalid pointer operation', u vecini slucajeva je access violation...
I nema neko odredjeno mesto gde se greska pojavljuje, ponekad se pojavi odmah nakon izvrsenja tek 3-4 naredbe, negde se pojavi pred kraj funkcije...
 
Odgovor na temu

Slavisa
Slavisa Dojcinovic
JKP Cistoca
Banjaluka

Član broj: 9861
Poruke: 44
*.teleklik.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 21:33 - pre 237 meseci
Ne mogu ti na pamet nista reci. Pokreni program kroz debugger pa prati liniju po liniju koda.
Slavisa
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.139.eunet.yu.



+1 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 21:59 - pre 237 meseci
Prvo moras da verifikujes kod koji radi taj posao (koji god), znaci kako radi bez upotrebe niti. Zatim taj kod ubacujes u nit, ali koristi TThread klasu a ne API pozive. Pa da vidimo kako ide...
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 22:06 - pre 237 meseci
Hajde sada cu da probam sa TThread klasom...
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 22:14 - pre 237 meseci
Radi !!!
a moze li nekako sa api funkcijama ?
 
Odgovor na temu

Slavisa
Slavisa Dojcinovic
JKP Cistoca
Banjaluka

Član broj: 9861
Poruke: 44
*.teleklik.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 22:25 - pre 237 meseci
Naravno da moze samo treba da otkrijes gdje grijesis :)
TThread ima ugradjene mehanizme za sinhronizaciju pa vjerovatno zato nisi imao problema. Zasto uopste hoces da koristis API ako TThread vec radi.
Slavisa
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 22:38 - pre 237 meseci
Zbog manje velicine izkompajliranog fajla... Da ne tupim sad, ali se program dodaje na pocetku programa koji treba da se zastiti i potrebno je da bude sto manji i blablabla
 
Odgovor na temu

neor
Nenad Orlovic

Član broj: 26828
Poruke: 74
*.metrohive.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 07:39 - pre 237 meseci
Ako koristis API onda obavezno postavi varijablu IsMultiThread na True.
Ako to ne uradis Delphi nece znati da postoji vise threadova i nece koristiti thread-safe kod tamo gde je potreban (alokacija memorije na primer).
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 10:20 - pre 237 meseci
A sta je problem sa Application.ProcessMessages? Usporava aplikaciju?

Samo napravi kod koji ce da to poziva relativno retko, recimo svaki stoti put kada se izvrsi neka iteracija i neces u Windowsu ni primecivati da radi.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.245.eunet.yu.



+1 Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 10:53 - pre 237 meseci
Vec je napomenuo da je aplikacija konzolnog tipa, znaci nema Application objekta...Mozemo mi do sutra da razglabamo ako ne znamo kako vrsi sinhronizaciju radne niti i glavne niti programa, i sta jos koristi sto ne sme. Tu potencijalno lezi problem. A i sta mu znaci "dodaje se na pocetku programa": dodaje se na exe na exe ili se ovo izvrsava pre glavnog koda jednog exe-a?

Takodje sta znaci da program bude sto manji? Koliki ti je sa TThread, a koliki sa API funkcijama? Nemoj da cepidlacis, ne pises programe za Spectrum :)
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 11:51 - pre 237 meseci
Hm da, prevideo sam da se radi o konzolnoj aplikaciji.

Princip je isti, samo se ne korsiti VCL, al da me ubijete sad ne moguda se setim kako iako sam to koristio.

Trebalo bi napisati sopstveni hendler za Windows poruke, sto nije nesto komplikovano pa preusmeravati na Windowsov hendler sve sto se nas ne tice.

Treba pretraziti malo net po kljucnoj reci DefWindowProc, sigurno ima gotovih primera.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 14:13 - pre 237 meseci
Resio sam problem !
Umesto CreateThread() sam stavio BeginThread() i sve radi kako treba (BeginThread u stvari samo stavlja IsMultiThread na TRUE)...
Sad jos jedno pitanjce... Kako da potpuno oslobodim thread ? Da stavim samo ExitCode(0) na kraju thread funkcije ili jos nesto ?

poz
 
Odgovor na temu

BIG FOOT

Član broj: 2964
Poruke: 449
*.ptt.yu.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?25.10.2004. u 09:36 - pre 237 meseci
Marko, ajde ako ti nije problem rezimiraj kako ti konzola radi u pozadini (bilo koji nacin).
Unapred zahvalan.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Izvrsavanje u pozadini... Kako ?

Strane: 1 2

[ Pregleda: 4971 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

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