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 15 mar 2025, o 04:44


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 24 mar 2017, o 09:10 
    Offline
    Nowy

    Dołączył(a): 10 kwi 2014
    Posty: 24
    Pomógł: 0

    Witam.

    Napisałem program do generowania liczb pierwszych.
    Kłopot w tym, że obliczenia wykonują się za wolno.
    Główną część programu umieściłem w Timer1 który wykonuje się z częstotliwością 1 ms.
    Programowanie obiektowe stwarza mi kłopot, bo nie można wykonać innego zdarzenia, gdy trwa inne zdarzenie.
    Gdyby chodziło by tylko o same obliczenia to zamknąłbym je w pętli. Ale co zrobić żeby "procek szalał" i obliczał mi tyle ile fabryka mu dała.
    a w między czasie co nawet sekundę wyświetlać wynik postępu. Jak zamknę obliczenia w pętli, to nie mogę ich wyświetlić na "Labelce"
    Dlatego użyłem Timer żeby cyklicznie wychodzić ze zdarzenia. No ale te 1 milisekunda burzy szybkość obliczeń.



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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 mar 2017, o 13:32 
    Offline
    Nowy

    Dołączył(a): 10 kwi 2014
    Posty: 24
    Pomógł: 0

    A gdzie ma się zaczynać ta główna pętla, skoro tu wszystko opiera się na zdarzeniach. Które to muszą być wpierw wywolane.
    A wartości są zwracane dopiero po opuszczeniu zdarzenia. hmmmm...
    Czy ktoś mi może podpowiedzieć co robić, będę wdzięczny.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2017, o 10:05 
    Offline
    Nowy

    Dołączył(a): 10 kwi 2014
    Posty: 24
    Pomógł: 0

    Hmmmm.... No tak juz probowalem. Klopot w tym ze dopuki nie opuszcze zdarzenia. Nie mozna wywolac innego zdarzenia. Np. Label.text.... Tzw. Kwadratura kola.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2017, o 15:33 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Nie działa Ci, bo nie może działać, activity_create ma służyć do ładowania formy/ustawień a nie do odpalania programu.
    Dopiero po jej załadowaniu odpala się reszta(timery też), ale możesz z niej wywołać innego suba np "dupa" ;)


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


    mogą być literówki - pisane na kolanie.
    Jeżeli timer by nie chciał odpalać, to musisz wstawić malutkiego sleepa gdzieś do pętli, albo olać go zupełnie i zmieniać tekst na lablu co jakiś czas, a ne za każdym przelotem pętli.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2017, o 18:39 
    Offline
    Nowy

    Dołączył(a): 10 kwi 2014
    Posty: 24
    Pomógł: 0

    y y...

    Nie działa!
    Działa jeżeli pętla będzie się kończyć!
    Nie działa gdy program nie wychodzi z pętli!
    Jak wyjdę z pętli to później nie ma jak wywołać procedury z tą pętlą (masło maślane)
    Jeżeli użyje timera do wywołania pętli to najmniejszy czas timera to 1 milisekunda. Więc program będzie kulał.
    A obliczenia będą "wolne".

    Więc jak zbudować licznik który zlicza z pełną prędkością zegara CPU. a inna procedura niech sprawdza co jakiś czas i wyświetla wynik na Labelce?!

    Czy ktoś ma jeszcze jakieś pomysły ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2017, o 19:06 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    czyli jest tak jak myślałem - nie odświeży formy przy zatkanej pętli.
    to zrób mu np tak w pętli, bez timera.
    Składnia: [ Pobierz ] [ Ukryj ]
    język vb
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2017, o 19:37 
    Offline
    Nowy

    Dołączył(a): 10 kwi 2014
    Posty: 24
    Pomógł: 0

    Dalej bedzie to samo. Mozna przypisac nowa wartosc do label.text ale i tak dopiero po wyjscu z danej procedury. Uaktualni sie ona na ekranie. W tym szkopul. Trzeba by sie wgryzc w miejsce w ktorym B4A czeka na zdarzenie. W takiej wewnetrznej petli, ktora jawnie nie jest przekazana dla uzytkownika. Takie mam przemyslenia. No Chyba zeby uruchomic kolejne activity, ktore by zliczalo w zamknietej petli...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 mar 2017, o 02:42 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Podejrzewam że też by były problemy z powodu zatkania, na poprzednim nawet timer nie ruszał ;)
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język vb
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Sprawdź i pomyśl gdzie leży rozwiązanie problemu ;)

    ------------------------ [ Dodano po: dzisiaj, o 01:42 ]

    tak działa o wieeele szybciej :P
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język vb
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 mar 2017, o 08:16 
    Offline
    Nowy

    Dołączył(a): 10 kwi 2014
    Posty: 24
    Pomógł: 0

    Serdeczne dzięki za "DoEvents", i poprawki w kodzie. Działa!
    Zauważyłem, że DoEvents odświeża tylko ekran. Timer dalej nie działa gdy pętla jest zamknięta. no i też nie pobiera danych np: EditText1_EnterPressed.
    No i przy zamkniętej pętli licznik dalej jest powoli odświeżany, prawdopodobnie DoEvents zwalnia całość bo musi wyświetlić. Tak czy siak. osiągnąłem zamierzony efekt.

    Dzięki też za podpowiedź "serwisu" mam motywację, żeby to ogarnąć.
    Więc zabieram się do roboty!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 mar 2017, o 08:42 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    U mnie na S3 mini przy tym drugim przypadku, przelatuje w około 30 sekund. Wszystko zależy od ustawienia modulo przed lablami. Timer nie odpali przy zatkanej procedurze, ale możesz zrobić tą pętle "do until" jako osobną funkcję i wtedy powinien przyjmować inne eventy, pomiędzy wywołaniami. DoEvents działa tylko na odświeżenie ekranu, na inne procedury niema wpływu.
    Możesz zrobić "zamkniętą" pętle, w zasadzie to zmienna "przelot" może być dowolna byle właśnie odświeżał co ileś tam, a nie za każdym odpaleniem "do until", ja użyłem licznika z for tylko dlatego że była i nie chciało mi się powoływać dodatkowej.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Ostatnio edytowano 28 mar 2017, o 11:25 przez Harry, łącznie edytowano 1 raz

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

    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO