Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 kwi 2024, o 07:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 6 wrz 2014, o 11:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Może są: delay, sleep, wait... :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 12:02 

Pomógł: 0

W C# jest //System.Threading.Thread.Sleep(20); ,ale jest to bardzo mało efektywne, przy większej ilości wątków program zaczyna mulić niemiłosiernie.

Szukał bym czegoś w stylu systick, albo rozwiązań na bazie zegara systemowego, by nie zawieszać żadnego wątku, czy nie robić chamskiego delay, chyba że tylko do testów chcesz. Z własnego doświadczenia powiem, że takie programy potem są nawet na 2 rdzeniowym wstanie powiesić cały system ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 12:08 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Anty poczytaj sobie o usypianiu wątków --> http://msdn.microsoft.com/pl-pl/library/d00bd51t(v=vs.110).aspx

Ja tego użyłem raz w jedenj aplikacji okienkowej(tyle że w C# ) to aplikacja w wywołaniu metody zachoywała się jakby sie zawiesiła ale mniej więcej spełniła moje oczekiwania. Są też Timery i one zdecydowanie lepiej działają, z resztą zależy do czego potrzebujesz opóźnień to stosujesz albo usypianie wątku, albo timerów - takie jest moje zdanie :)

Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 13:14 

Pomógł: 0

Mogę ci powiedzieć, że jakiekolwiek wrzucanie do kodów wite, delay, po prostu kończy się czkawką softu, jeżeli ten obsługuje bazę danych, jakieś pobieranie/przetwarzanie danych itp.
Niestety, u mnie panuje taka maniera, że softy są pisane na kolanie w C# i potem kończy się to tym, że nawet dwu rdzeniowy atom nie wyrabia z prostym softem.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 13:32 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Antystatyczny napisał(a):
Na razie chcę pomigać napisem Hello world w konsoli - nic więcej


to do tego wystarczą ci przy programowaniu na PC najzwyklejsze Timery, które na pewno są w C# .... i wtedy żadnego delaya nie trzeba ;) a program się nie musi zatrzymywać ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 13:55 

Pomógł: 0

Tj. problem leży w tym, że zamiast np. zrobić opóźnienie wysyłania odpowiedzi po dostaniu danych, na timerze, czyli bez wrzucania zbędnych opóźnień do programu, jest zwykły wite ;). Co przy obsłudze kilkudziesięciu urządzeń powodowało iż system po kilku godzinach pracy dostawał niesamowitej czkawki, aż praktycznie do powieszenia całego systemy, nie wiem czy to spowodowane jest samą architekturą windowsów zarządzania czasem procesora etc. ale koniec końców wywalenie wite i zcedowanie go do urządzenia docelowego, rozwiązało problem.
Czyli urządzenie wysyła i odbiera dane potwierdzające jak to szybko możliwe, zaś interfejs użytkownika na docelowym urządzeniu dba już o to by sam użytkownik miał czas na zauważenie potwierdzenia wysłanych danych.

Ja nie twierdzę, że to zło. Tylko to jak z delay na AVRach, używane w głównej pętli, powoduje spore problemy.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 14:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

reza - ale programując na PC pod żadnym pozorem w wątku głównym nie można stosować poleceń typu SLEEP , WAIT itp ....

masz do tego tysiąc narzędzi żeby nie korzystać z tego (niekoniecznie zaraz wątki ... w których użycie krótkiego SLEEP'a nic nie boli) ;) ...

zdarzenia, timery itp itd .... Tutaj tzn na PC - to już nie jest tak że jakiś tam SLEEP/WAIT troszkę szkodzi ale da się żyć - WOGÓLE - nie można z tego korzystać a szczególnie przy powtarzających się często procesach tzn np w jakimś zdarzeniu itp ... bo blokujesz permanentnie cały wątek i nie dziwota - że aplikacja tzn nawet jej formatka się "zamraża" i mamy komunikat - "brak odpowiedzi"

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 19:24 

Pomógł: 0

mirekk36 napisał(a):
reza - ale programując na PC pod żadnym pozorem w wątku głównym nie można stosować poleceń typu SLEEP , WAIT itp ...


Wiesz, ja o tym wiem ;), aż za dobrze sobie zdaję sprawę z niedbalstwa programistów ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 21:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2013
Posty: 568
Zbananowany użytkownik

Pomógł: 31

mirekk36 napisał(a):
reza - ale programując na PC pod żadnym pozorem w wątku głównym nie można stosować poleceń typu SLEEP , WAIT itp

A właśnie że należy stosować i to w pętli głównej.
Jeśli po przejściu pętli stwierdzamy że nie ma nic do roboty, nie ma danych albo wszystkie zostały przetworzone to należy wywołać sleep(0), wtedy niewykorzystany przydział czasu zwracamy do systemu, jądro przydziela czas następnemu procesowi.
Jeśli coś ma być robione cyklicznie w równych odstępach czasu lepiej jest użyć timera niż sleep.

_________________
Und schreien

Spring
Erlöse mich
Spring
...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 21:30 

Pomógł: 0

PROTON napisał(a):
sleep(0), wtedy niewykorzystany przydział czasu zwracamy do systemu, jądro przydziela czas następnemu procesowi.


To cenna wskazówka, że nie wite, a sleep :D



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2014, o 23:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

PROTON napisał(a):
A właśnie że należy stosować i to w pętli głównej.


A gdzie masz pętlę główną w obiektówce ? ... w wątkach tak ... może być i dłuższy SLEEP ... Ale nie w wątku głównym. Chyba że piszesz w C

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2014, o 07:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2013
Posty: 568
Zbananowany użytkownik

Pomógł: 31

Racja, dawno nie pisałem aplikacji pod Windowsem, ostatnio dłubię w Linuxie.
W WinMain() nie ma sensu dawać instrukcji sleep.

Jeśli trzeba coś cyklicznie wykonywać, można zastosować timer.
Ustawiamy timer:

Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Następnie w WndProc umieszczamy obsługę zdarzenia WM_TIMER, tych timerów może być wiele różnych, tylko każdy musi mieć swój ID.
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Und schreien

Spring
Erlöse mich
Spring
...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2014, o 10:38 

Pomógł: 0

mokrowski napisał(a):
Jeśli któreś z koleżanek/kolegów posiada trochę wiedzy związanej z programowaniem wielowątkowym (bo to jest temat w kierunku którego migrujemy), wywołań asynchronicznych lub innych technik/narzędzi które udostępnia system operacyjny (MS Windows i GNU/Linux), osobiście byłbym zobowiązany gdybym zobaczył jakiś tutorial/artykuł obejmujący ten temat. Nie ukrywam że jeszcze lepiej gdyby rzecz dotyczyła MCU


I to jest bardzo dobra koncepcja. Gdyż dobrych poradników nigdy dosyć.



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO