Timer wewnątrz aplikacji

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Lock
Posty: 4
Rejestracja: 14 maja 2013 14:45
Wersja środowiska: LabVIEW 2009

Timer wewnątrz aplikacji

Post autor: Lock »

Witam!
Mam problem z budową timera. Mam dosyć rozbudowaną aplikację (jest to gra) w której muszę umieścić zwyczajny zegar. Szukałem w sieci podobnych rozwiązań lecz wszystkie, które znalazłem były stworzone na osobnej pętli. U mnie nie może być osobnej pętli ponieważ aplikacja powtarza wielkie połacie kodu w wielkiej pętli i jeśli zacznie wykonywać pętlę z timerem to nie przechodzi dalej. Zależy mi na tym, żeby było widać realny upływający czas i np. po 100 sekundach żeby cała aplikacja się zatrzymała.
Ma ktoś jakiś pomysł?
Pozdrawiam.
Rolego
Posty: 3
Rejestracja: 16 lip 2013 12:35
Wersja środowiska: LabVIEW 2012

Re: Timer wewnątrz aplikacji

Post autor: Rolego »

Hej!

Nie wiem czy dobrze zrozumiałem twój problem, jednak LabVIEW jest programem gdzie wielowątkowość jest dana za darmo i pętla zewnętrzna będzie się wykonywać równolegle do twojego kodu i czas rzeczywiście odmierzy.

W załączniku wysyłam 2 rozwiązania. Nie wiem czy są pomocne. Pierwsze z nich (po lewej stronie obrazka) bazuje na zewnętrznej pętli. Rozwiązanie po prawej stronie możesz żywcem wsadzić do twojej pętli obsługi zdarzeń. Dasz WaitUntilMs lub coś tego rodzaju i zasoby wykorzystane nie będą wysokie.

Pozdrawiam
Załączniki
timer.png
timer.png (13.53 KiB) Przejrzano 7523 razy
milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Timer wewnątrz aplikacji

Post autor: milten »

Jeżeli potrzebujesz tylko zmierzyć czas i np po tych 100 sekundach wyłączyć aplikację, to najlepiej użyć Elapsed Time. Jest to expres VI, który odmierzy Ci niezależnie jaki chcesz czas. Nie blokuje on aplikacji i jeżeli na szybko coś potrzebujesz, to on chyba najlepszym rozwiązaniem będzie.
Ostatnio zmieniony 17 lip 2013 21:40 przez milten, łącznie zmieniany 1 raz.
Obrazek
Lock
Posty: 4
Rejestracja: 14 maja 2013 14:45
Wersja środowiska: LabVIEW 2009

Timer wewnątrz aplikacji

Post autor: Lock »

Ogólnie to mam kilka pętli w sobie porobionych. Chodzi o to, żeby czas był odmierzany i wyświetlany gdzieś z boku i jeśli zostanie przekroczony czas to najbardziej zewnętrzna pętla powinna zostać automatycznie zatrzymana. Także kontrola czasu musi być cały czas, niezależnie w jakiej fazie wykonywania jest program. Chodzi o to, że sprawdzenie warunku czasowego dla najbardziej zewnętrznej pętli mam dopiero na samym końcu i można powiedzieć, że takich timerów muszę porobić kilka, w różnych fazach wykonywania programu.
Potrzebuje coś takiego co non stop będzie mi przekazywać wartości czasowe do wnętrza programu.
Tak wykonany timer przekaże mi czas tylko na samym początku. :/

Nie wiem czy dobrze tłumaczę o co chodzi. Już mi się mota wszystko :/

@edit
Tak jak myślałem...
Wpada mi w tą pętlę i z niej nie wychodzi ;/ Czyżby mój LabView nie wspierał wielowątkowości? : O

PS. Głównie chodzi mi o płynne wyświetlanie upływającego czasu
Ostatnio zmieniony 17 lip 2013 23:31 przez Lock, łącznie zmieniany 1 raz.
milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Timer wewnątrz aplikacji

Post autor: milten »

Jeżeli chcesz z wielu miejsc odczytywać ten sam timer, to najlepszy będzie taki oparty na FGV. Poszukaj w internecie, albo na forum
Obrazek
Lock
Posty: 4
Rejestracja: 14 maja 2013 14:45
Wersja środowiska: LabVIEW 2009

Timer wewnątrz aplikacji

Post autor: Lock »

Nie tyle chcę odczytywać co wyświetlać ten czas nieustannie i jak czas się skończy to żeby nie wykonywało dalej pętli wewnętrznych, zakończyło pętlę zewnętrzną i przeszło do kolejnej sekwencji.
Nie wiem, mi jakoś nie działają te dwa wątki równolegle :(
timpane
Posty: 1
Rejestracja: 27 sie 2013 11:38
Wersja środowiska: LabVIEW 8.0

Timer wewnątrz aplikacji

Post autor: timpane »

Jest to expres VI, który odmierzy Ci niezależnie jaki chcesz czas. Nie blokuje on aplikacji i jeżeli na szybko coś potrzebujesz, to on chyba najlepszym rozwiązaniem będzie. #-o
ODPOWIEDZ