Piotrek1910 Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 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 Więcej opcji udostępniania...
ediepl Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 W c# nie ma czegoś takiego jak alarmy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piotrek1910 Opublikowano 22 Sierpnia 2013 Autor Udostępnij Opublikowano 22 Sierpnia 2013 Wiem. Ale czy da się napisać coś w podobie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 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 Więcej opcji udostępniania...
Jakim Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 Nie znam się na C#, ale warto uprzednio ustalić, czy Twój program: - posiada pętlę główną, - kończy się wraz z wykonaniem ostatniego polecenia. Jeżeli to drugie, na alarmy nie ma co liczyć, możesz co najwyżej bawić się datą systemową. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Compi Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 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 Więcej opcji udostępniania...
Utermiko Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 @UP do pobierania aktualnego czasu masz DateTime.Now. Nie ma potrzeby importować funkcji. System.Timers.Timer Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 sproboj sobie poczytac Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 22 Sierpnia 2013 Udostępnij Opublikowano 22 Sierpnia 2013 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 Więcej opcji udostępniania...
Piotrek1910 Opublikowano 23 Sierpnia 2013 Autor Udostępnij Opublikowano 23 Sierpnia 2013 Ok. Dzięki wam. Spróbuje coś wykombinować :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ninja Opublikowano 23 Sierpnia 2013 Udostępnij Opublikowano 23 Sierpnia 2013 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 Więcej opcji udostępniania...
Utermiko Opublikowano 23 Sierpnia 2013 Udostępnij Opublikowano 23 Sierpnia 2013 Założyłem że @Piotrek1910 nie posiada pętli głównej która wykonuje się z identyczną częstotliwością co sekundę. Poza tym twój sposób jest troszkę nieelegancki oraz tablice inaczej deklarujemy w c# niż pokazałeś. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piotrek1910 Opublikowano 24 Sierpnia 2013 Autor Udostępnij Opublikowano 24 Sierpnia 2013 To co ja tworze to jest Windows Forms czyli chyba jest pętla główna skoro nie kończy się na ostatnim poleceniu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ninja Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 To co pokazałem to tylko takie objaśnienie "jak" :) Ma wzór, poradzi sobie ze zrobieniem ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 To co ja tworze to jest Windows Forms czyli chyba jest pętla główna skoro nie kończy się na ostatnim poleceniu. Owszem, jest pętla główna, ale czy wykonuje się z identyczną częstotliwością co sekundę? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 Owszem, jest pętla główna, ale czy wykonuje się z identyczną częstotliwością co sekundę? To już chyba musiałby robić delte time, żeby się z identyczną częstotliwością robiło. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ninja Opublikowano 26 Sierpnia 2013 Udostępnij Opublikowano 26 Sierpnia 2013 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 Więcej opcji udostępniania...
Utermiko Opublikowano 26 Sierpnia 2013 Udostępnij Opublikowano 26 Sierpnia 2013 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 Więcej opcji udostępniania...
ereg Opublikowano 26 Sierpnia 2013 Udostępnij Opublikowano 26 Sierpnia 2013 na milisec to chyba niejest, ale room_speed jest zmienna ktora mowi grze ile cykli (step) my wykonac jesli zdozi. :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piotrek1910 Opublikowano 25 Września 2013 Autor Udostępnij Opublikowano 25 Września 2013 Dobra już rozwiązałem problem. Użyłem Timer'ów. Na początku nie wiedziałem jak użyć ale troche poszperałem w necie i już działa. Wielkie dzięki wszystkim za pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę