Skocz do zawartości

Alarm w C#?


Rekomendowane odpowiedzi

Witajcie, postanowiłem uczyć się C#(ze względu na prostotę). Niestety od kilku dni mam rozkminę nad czymś takim jak w GML czyli alarm. Próbowałem wykorzystać Sleep niestety ta komenda zawiesza cały program na x sekund. Próbowałem też z SpinWait niestety nie wiem jak to wykorzystać :/ a także próbowałem z pętlą for, niestety też nic :/. Może wy macie jakiś pomysł?

Odnośnik do komentarza
Udostępnij na innych stronach

i v gml mozes ominoc potrzebe alarmu programujoc test na uplyw czasu.

 

-zapisujesz czas do zmiennej xy_czas.

-i testujes te zmienno xy_czas + wielkosc_czasu _do vykonania_akcji jesli jest vieksa niz aktualny czas.

--jestli jest wieksza to odpalasz akcje :thumbsup:

--jesli nie to czekas dalej

 

moze jest cos wiecej przydatnego v v C# albo .NET, ale tyle sie na tym nieznam :)

Odnośnik do komentarza
Udostępnij na innych stronach

Timera użyj, jeśli to program okienkowy.

Jeśli używasz Sleepa i nie chcesz zamuły, przed sleep daj coś w stylu ProcessMessages (np. w Delphi jest Application.ProcessMessages)

Dzięki temu aplikacja będzie dalej otrzymywała sygnały od systemu (ruch myszy, rysowanie, kliknięcie na X itp.)

 

EDIT:

Jeśli to aplikacja konsolowa i ma pętle główną

to możesz sprawdzac czas w ten sposób:

if GetTickCount() mod INTERWAŁ_W_MS == 0 {

 

akcja

 

}

 

GetTickCount zdaje się jest w kernel32.dll lub user32.dll

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli użyjesz Timera z System.Timers pamiętaj o tym, że event Elapsed będzie wykonany na innym wątku.

Jeśli piszesz program okienkowy to najprościej to zsynchronizować przypisując do właściwości SynchronizingObject w timerze formę.

//w kodzie formy
mojTimer.SynchronizingObject = this;

Odnośnik do komentarza
Udostępnij na innych stronach

Tak sobie czytam ten temat i myślę, że można to zrobić w prosty sposób:

 

1. Tworzymy sobie listę alarmów( zróbmy jak w gm.. )

int Alarm[ 15 ];

 

2. W pętli programu stale odejmujemy czas alarmow

for( int i = 0; i < 15; i++ ) Alarm[ i ]--;

 

3. Chcąc użyć alarmu dajemy w kodzie np:

...
Alarm[ 0 ] = 10;

 

4. Sprawdzamy w pętli czy już czas, na wykonanie alarmu

if( Alarm[ 0 ] == 0 ) {
    //... kod
}

 

Ten przykład nie jest na timerach itp, bo i po co? Alarm w gm działą tak samo - co step :)

Odnośnik do komentarza
Udostępnij na innych stronach

Owszem, jest pętla główna, ale czy wykonuje się z identyczną częstotliwością co sekundę?

 

A czy w GM tak jest? oO Co sekundę? Chyba Nie ;) I chyba nawet lepiej, bo jeśli chcę cobie coś wykonać po danej ilości updatestów to taki prosty kod dobrze się tu sprawdza. Jeśli chcę robić to na czas to używam <time.h>. Do tego też Wam napisać kod? ^^

Odnośnik do komentarza
Udostępnij na innych stronach

A czy w GM tak jest? oO Co sekundę? Chyba Nie ;) I chyba nawet lepiej, bo jeśli chcę cobie coś wykonać po danej ilości updatestów to taki prosty kod dobrze się tu sprawdza. Jeśli chcę robić to na czas to używam <time.h>. Do tego też Wam napisać kod? ^^

room_speed. Z tego co wiem to domyślnie jest 30 klatek na sekundę.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 5 tygodni później...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...