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



Teraz jest 26 kwi 2024, o 23:55


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