[Visual Basic 6.0] Problem z Timerem i opóźnieniem

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

[Visual Basic 6.0] Problem z Timerem i opóźnieniem

Post autor: gwozdex » 13 lis 2008, 12:14

Witam wszystkich!
Mam pewien problem. Zerknijcie proszę na poniższy kod:

Kod: Zaznacz cały

while status <>128
'
'badanie zmiennej status- czy wynosi 128?
wend
Petla powyższa ma za zadanie opóźnić wykonanie programu do momentu gdy status=128. I to działa bez problemu. Niestety w momencie wejścia do tej pętli przestają działać przerwania od kontrolki Timer które są mi niezbędnie potrzebne. W przerwaniu tym co 10ms uaktualniana jest wartość pola pokazującego aktualną pozycję X i Y. Ponieważ pozycja ta zmienia się głównie podczas trwania wyżej pokazanej pętli a przerwania nie są obsługiwane to tak na prawdę nie uzyskuję żadnego efektu.
Drugi sposób jest taki:

Kod: Zaznacz cały

while status <>128

'badanie zmiennej status- czy wynosi 128?
' pobierz wartość z rejestrów
' wypisz wartości na etykietach i polach tekstowych:
text1.text= str(poz_X)
'ZATRZYMANIE DZIAŁANIA PROGRAMU NA KILKA...KILKADZIESIĄT MILISEKUND?????/
wend
w powyższym kodzie zrobiłem nic innego jak "wsadziłem" obsługę przerwania do pętli WHILE..WEND. Niestety bez pewnego opóźnienia na jej końcu dane zmieniają się zbyt szybko i koneczne jest opóźnienie. Mam na myśli coś w stylu instrukcji (DELPHI 7):

Kod: Zaznacz cały

 Delay (ilość_milisekund)
Sleep (ilość_milisekund)
.
W VB6.0 nie ma takiej funkcji.
Zatem jeszcze raz w skrócie o co chodzi:
- jak sprawić żeby podczas trwania pętli WHILE...WEND obsługiwać przerwania od TIMER
lub
- jak wprowadzić opóźnienie kilkudziesięciu milisekund.

Jeśli ktoś wie jak ugryźć mój problem to będę wdzięczny za pomoc.
Pozdrawiam Janusz.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 13 lis 2008, 12:39

Po pierwsze Timer nie generuje przerwania, a zdarzenie. Gdyby to bylo przerwanie, to wszystko by dzialalo. Kiedy Twoj program "mieli sie" w petli, wykorzystuje cala moc obliczeniowa i nie zostaje jej na nalezyte odliczenie czasu zdarzenia pochodzacego od licznika.
W VB od dawna juz nie programuje, ale byla taka magiczna funkcja, ktora wymuszala obsluge interfejsu i po wstawieniu jej do whila calosc dzialala znacznie lepiej. Kojarzy mi sie ze bylo to cos w stylu "DoEvents" czy jakos tak...

[ Dodano: 2008-11-13, 12:40 ]
(czyzby moja pamiec byla az tak dobra???)
http://msdn.microsoft.com/en-us/library ... vents.aspx

[ Dodano: 2008-11-13, 12:41 ]
http://www.handheld-basic.com/documenta ... vents.html

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 13 lis 2008, 15:17

alaris masz aż tak dobrą pamięć :). Gdybyś jeszcze mógł zerknąć na poniższy kod:

Kod: Zaznacz cały

Dim i, j As Long

Private Sub Command2_Click()
For j = 0 To 10000
DoEvents
Debug.Print "zdarzenie_click"
Next j
Debug.Print i; "*"
End Sub

Private Sub Form_Load()
i = 0
End Sub

Private Sub Timer1_Timer()
i = i + 1
Debug.Print i
End Sub
Mam wrażenie, ze zdarzenie od timera jest obsługiwane ale efektów jego pracy nie widzę. No bo tak. Uruchamiam program i w okienku podglądu zmiennych (immediate widnow) wyskakują kolejne cyferki 1,2,3,4,5.... W momencie naciśniecia przycisku w tym samym okienku pojawiają się napisy "zdarzenie_click". Po wypisaniu ich wszystkich znów wyskakuja cyferki. Jeśli nacisnąłem przycisk przy i=20 to po zakończeniu petli for cyferki zaczynają się pojawaić od 30 czyli timer pracował podczas wykonywania petli! I to chciałem osągnąć ale dlaczego nie widać efektów pracy timera??

Acha jeszcze jedno- interwał pomiędzy kolejymi wywołaniami timera jest któtszy niż czas potrzebny na wykonianie petli FOR.

[ Dodano: 2008-11-13, 15:32 ]
Przepraszam błąd- efekty są widoczne tylko trudno zauważalne :( W zależności od ustawien interwału pomiędzy kolejnymi literkami pojawia się większa lub mniejsza ilość napisów "zdarzenie_click". Jak będą jeszcze jakieś problemy to dam znać! Na razie wielkie dzięki!

ODPOWIEDZ