Visual C#_casovnik

  • Začetnik teme kostajov@eunet.yu
  • Datum pokretanja
K

kostajov@eunet.yu

Gost
Program je pisan u jeziku Visual C#. Program vrsi obradu podataka nekoliko minuta. Dok se vrsi obrada zelim da u Box kontroli svo vreme se pojavljuju podaci o vremenu u sekundama!Kako?
Hvala!
 
nisam probao , pisem iz glave ali trebalo bi da radi.
dodaj kontrolu tipa timer , podesi enabled=true , interval = 1000.
pretpostavljam da se box zove myBox i da je inicijalna vrednost teksta "0"

timer_click(Object sender , EventArgs e)
{
myBox.Text=(Convert.ToInt32(myBox.Text)+1).ToString();
}

postoji milion drugih nacina da se to uradi , sve zavisi sta ti treba ,
ako hoces opsirnije - ddjenic@yahoo.com

Poz!
 
Sta god da radis i zelis da meris vreme u istom trenutku najbolje je da se drzis najboljeg brojaca vremena, a to je vreme rada kompjutera (od kako je upaljen) u milisekundama. Naprvasis prost algoritam za glavni deo tako da ti se u svakom krugu obrade poziva funkcija koja meri vreme. (ona je vrlo prosta i nece ti oduziti rad, a sigurno ce biti brza od timer kontrole). Evo ti ideje kako treba da ide funkcija (namerno necu da ti pisem kako ide kod :D ).

Imas promenljivu u kojoj ces da pamtis koliko je vec proslo (LONG, ne zaboravi da su to ms), u njoj ces na pocetku programa da sacuvas to proteklo vreme pozivom odgovarajuce funkcije (za TickCount), i imaces funkciju koja ce da cita opet vreme i da smesta u novu promenljivu. Napravices razliku izmedju ove promenljive i predjasnje i dobices vreme koje je proteklo u ms i na kraju ces vrednost druge promenljive da smestis u prvu. To je to, posle mozes da pravis sat, da pravis programe zavisne od vremena i tako to.
POZDRAV
 
Mala digresija : veze nemam sa .Net , ali pretpostavicu da je message-driven, kao i WinAPI. Ako nije, zanemarite ovo pisanije.

Dakle, sve ono gore je u redu, ali chovek kazhe da mu obrada traje minutima. Ako ti sistem shalje Timer-poruku npr. svake sekunde, moracesh da je obradish. A necesh je obraditi ako ti se kood sve vreme vrti u toj tvojoj funkciji, tj. ako ne ulagani malo i pusti message-pump-u da obradi svoje (u principu, sve poruke ce stizati, ali bice "zaglavljene"). Ono shto treba da uradish u toj velikoj funkciji je da (ako je u C# moguce) ukoliko imash neki veliki loop, u svakoj iteraciji kazhesh sistemu da "pogura" poruke, kako bi ti Timer-message uopshte i stigao!
 
dobro zapazanje :)
stavi u petlji Application.DoEvents
to ce da ti obradi poruke pristigle u medjuvremenu, ili barem ja tako mislim.
u delphiju je Application.ProcessMessages, mislim da je ovo u .net-u.
that sould do the trick :)
 
stormbringer:
mozda je ono prvo ipak bolje jer ce ova milion puta u sekundi da ti osvezi sadrzaj edit boxa, pa ce mozda da trepka malo :)

Da. Kao prvo nece milion puta nego samo 1000 :D
Salu na stranu, ako ne mozes da stavis najobicniji upit da li je ta razlika veca od hiljadu i da ako nije ne vrsis zamenu promenljivih, a ako jeste onda posaljes vreme cemu vec hoces, onda uzmi kontrolu, definitivno je bolje :lol: .
A Lord British je upravu treba i napomenuti da MORAS da das oduska sistemu da radi i nesto drugo a ne da se smara samo sa tvojim linearnim algoritmom. Jer ako bude radio malo duze bice (NOT RESPONDING) :D .
A sto se tice timer kontrole, probaj sta ce vise da smori ionako vec spor program.
A sta mislis kako ona radi?
 
Ybga, kad ste vec pocheli...
WM_TIMER ima nizak prioritet i NECE okidati 1000x u sekundi, to je samo teorijska vrednost. Timer u Win-u radi u rezoluciji chasovnika na plochi, shto je oko 18Hz. To je najfinija rezolucija koja mozhe da se dobije. Znachi, nije za neka ultra-fina merenja, ali vrshi posao za ovakve stvari. Bolje je prepustiti Windows-u da ti shalje poruke nego da sam merish i rizikujesh da zayebesh neshto.
 
Shta je brzhe/preciznije :
Multimedijalni tajmeri u Windowsu ili rdtsc assembler instrukcija na PentiumMMX-u pa na ovamo.

Za multimedijalne tajmere (PerformanceCounter-e) pogledaj WinAPI help, a za ovo drugo... ipak pogledaj WinAPI za ono prvo, u osnovi i Win koristi ovaj drugi nachin ;)
 
ja mislim da je najpreciznije meriti vreme u ciklusima. naime mozes da dobijes broj ciklusa od ukljucenja racunara (ima ih npr. milijardu ako je procesor na 1ghz) i da podelis sa taktom, tako ces dobiti vreme prilicno tacno.
kod za delphi (mada se lako portuje) je:

function GetCPUTick: Int64;
asm
DB $0F,$31
end;

to je u sustini RDTSC komanda, koja je vec pomenuta valjda :)
simple, isn't it :)
 

Back
Top