Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 3.513 pregleda

Najnovija ↓

windows forms i konstantno citanje podataka 18.02.2014. u 19:07 · pre 154 meseca #1
E ovako: Imam neki uredjaj iz kojeg trebam sto brze dobijati podatke. I to u console application radi. Svako 20ms uzmem podatak. Recimo neku bool vrijednost. Uglavnom je li nesto ukljuceno ili iskljuceno.
E sad ja trebam nesto crtati tj. mijenjati boje u ovisnosti je li nesto ukljuceno ili iskljuceno, tj. u ovisnosti o stanjima tih bitova(bool vrijednosti).
Problem je kad u windows forms pokusam citati te vrijednosti iz uredjaja program mi odma crash-a jer to moram da stavim u infinite loops(citam podatke recimo svako 100ms)..nesto tipa
Code:

While(1)
{
     citaj iz uredjaja....
pauza 100ms

}


Program odma puca cim stavim ovaku petlju u windows forms, cak i bez citanja iz uredjaja...pa se pitam kako mogu najbolje uzimati podatke iz uredjaja i uredjivati grafiku na windows forms o ovisnosti stanja iz uredjaja?
AKo treba mogu jos detaljnije objasniti problem.
Re: windows forms i konstantno citanje podataka 18.02.2014. u 19:13 · pre 154 meseca #2
Nikada, ni po koju cenu, nikada ne blokiraj glavnu nit sa mrtvom petljom ili nečim što se dugo izvršava (ili pauzom) - tvoj GUI će ti zablokirati. Najjednostavniji način ti je da napraviš tajmer koji će da okida na 20 ms. Međutim, moraš paziti na činjenicu da je rezolucija Windows.Forms.Timer-a 55 ms, pa će to možda biti previše sporo. Pogledaj ovo http://www.codeproject.com/Art...ia-Timer-for-the-NET-Framework ili http://stackoverflow.com/quest...s-forms-application-in-c-sharp

Ako ti je preciznost Windows.Forms.Timer-a dovoljna, onda pogledaj ovo http://www.youtube.com/watch?v=98c200lL-OY
Re: windows forms i konstantno citanje podataka 18.02.2014. u 19:29 · pre 154 meseca #3
OK, ako sam dobro razumio trebao bi napraviti neki timer da okida svako 55+ ms? da bi sve stimalo dobro?
55ms je dovoljno brzo, ali ajde kad si vec to spomenuo taj timer od windows forms...bili li bio veliki problem kad bi taj timer okidao svako 20ms a windows forms timer je 55ms?
tj bi li mi opet program pucao?

Hvala na brzom odgovoru
Re: windows forms i konstantno citanje podataka 18.02.2014. u 19:50 · pre 154 meseca #4
Ono što ti je Burgos rekao i što je suština je da taj posao prebaciš u drugi thread, različit od onoga u kome se iscrtava Form tvoje aplikacije (glavni thread). Dakle tvoj "glavni radnik" iscrtava ekran i prikazuje podatke iz uređaja koje prikuplja "drugi radnik".
System.Timers.Timer bi trebao da je bolji od onog u System.Windows.Forms.Timer. Davno sam ovo pročitao pa se ne sećam zbog čega ali ako te interesuje, izgoogle-uj.
Što se minimalnog vremena tiče ono nije konstantno. Evo jednog kratkog teksta o tome: "The default timer resolution on Windows 7 is 15.6 milliseconds (ms). Some applications reduce this to 1 ms, which reduces the battery run time on mobile systems by as much as 25 percent."
Pozdrav
Re: windows forms i konstantno citanje podataka 18.02.2014. u 20:18 · pre 154 meseca #6
Citat:
Dusan Kondic: System.Timers.Timer bi trebao da je bolji od onog u System.Windows.Forms.Timer. Davno sam ovo pročitao pa se ne sećam zbog čega ali ako te interesuje, izgoogle-uj.


Mislim, Windows.Forms timer okida UI event, a za non-UI thread System.Timers.Timer.
Re: windows forms i konstantno citanje podataka 18.02.2014. u 23:31 · pre 154 meseca #7
Timer podrazumevano radi u posebnom thread-u tako da je tvoj posao da u Timers_Elapsed kupiš podatke iz uređaja i upisuješ ih u npr. lokalne promenljive i to će, kao što rekoh, podrazumevano da se dešava u posebnom thread-u.
Osnovni thread treba da prikazuje te podatke na ekranu i pitanje je samo na koji način to treba da se izvede. Ako postaviš petlju u kojoj će neprekidno da se prikazuje trenutna numerička vrednost na ekranu, zbog brze promene vrednosti, neće moći da vidi ništa smisleno. Jedno rešenje je da trenutnu vrednost prikazuješ kao vrednost ProgressBar-a a drugo da ubaciš drugi timer koji će da prikazuje novu vrednost kao numeričku vrednost npr. svake sekunde.
Iznesi svoje zahteve a mi ćemo da predlažemo rešenja.
Pozdrav.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme