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

Izvrsavanje u pozadini... Kako ?

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

Strane: 1 2

[ Pregleda: 1759 | Odgovora: 21 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.neobee.net.



Profil

icon Izvrsavanje u pozadini... Kako ?10.10.2004. u 15:08

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 ?
10.10.2004. u 15:08 

vladab
Vladimir Bašanović
Beograd

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



Profil

icon Re: Izvrsavanje u pozadini... Kako ?10.10.2004. u 17:08
Imas TThread klasu...file|new|other|thread object... Ja sam pravio da mi muzika ide u pozadini i radilo je ok.
Seven deadly sins
Seven ways to win
Seven holy paths to hell
And your trip begins

Seven downward slopes
Seven bloodied hopes
Seven are your burning fires,
Seven your desires...
10.10.2004. u 17:08 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 15:46
Postoji li neki drugi nacin ???
11.10.2004. u 15:46 

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
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
11.10.2004. u 17:39 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

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

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
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
11.10.2004. u 18:37 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

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

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 21:02
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...
11.10.2004. u 21:02 

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
Ne mogu ti na pamet nista reci. Pokreni program kroz debugger pa prati liniju po liniju koda.
Slavisa
11.10.2004. u 21:33 

morlic
Milos Orlic
Beograd

Moderator
Član broj: 6081
Poruke: 729
*.139.eunet.yu.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 21:59
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...
11.10.2004. u 21:59 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 22:06
Hajde sada cu da probam sa TThread klasom...
11.10.2004. u 22:06 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 22:14
Radi !!!
a moze li nekako sa api funkcijama ?
11.10.2004. u 22:14 

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
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
11.10.2004. u 22:25 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?11.10.2004. u 22:38
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
11.10.2004. u 22:38 

neor
Nenad Orlovic

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



Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 07:39
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).
12.10.2004. u 07:39 

broker

Član broj: 2415
Poruke: 8521
212.62.59.*



Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 10:20
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.
12.10.2004. u 10:20 

morlic
Milos Orlic
Beograd

Moderator
Član broj: 6081
Poruke: 729
*.245.eunet.yu.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 10:53
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 :)
12.10.2004. u 10:53 

broker

Član broj: 2415
Poruke: 8521
212.62.59.*



Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 11:51
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.
12.10.2004. u 11:51 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Izvrsavanje u pozadini... Kako ?12.10.2004. u 14:13
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
12.10.2004. u 14:13 

BIG FOOT

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



Profil

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

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

Strane: 1 2

[ Pregleda: 1759 | Odgovora: 21 ]

Postavi temu Odgovori

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