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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 1 maja 2025, o 17:36


    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    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