PasjaGSM.pl
  Jesteś w: Forum > Jak wykonać to za pomocą timerów?


Jak wykonać to za pomocą timerów?

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Jak wykonać to za pomocą timerów?
Poprzedni temat «» Następny temat
Autor Wiadomość
 
_Brutus 
Moderator
dragon podśmiechujek



Telefon: Samsung Ace II
Operator: Plus
Pomógł: 49 razy
Wiek: 27
Dołączył: 20 Lis 2005
Posty: 1191
Skąd: Łódź
Wysłany: 2006-05-04, 15:47   Jak wykonać to za pomocą timerów?

Witam, mam takie jedno pytanie. Posiadam pewne źródła w c++ i tam jest takie coś:

Kod:
   

    // ------------------------------time
    ( &hunger_finish );               
    if ( (difftime(hunger_finish, hunger_start) >= (3600*(1/time_speeder)) ) && (hunger != 0) )
    {
        hunger--;
        time( &hunger_start );
    }
   
    // ------------------------------


chodzi mi dokładnie o to: (difftime(hunger_finish, hunger_start), co to w ogóle znaczy i czy dałoby rade wykonać to na timerach w nokix'ie, albo jakoś inaczej?

Chyba wiadomo o jaką grę, czy aplikację chodzi ;]

[ Dodano: 2006-05-04, 17:45 ]
tak mi chodzi po głowie

Kod:
int calc_timestamp( const struct  datetime  * dt1,
 const struct  datetime  * dt2 )


ale nie jestem pewien :/
^
 
  Skype
     
AdSense


druidbartek 
Expert



Telefon: DCT-3
Operator: Era
Pomógł: 39 razy
Wiek: 31
Dołączył: 13 Wrz 2005
Posty: 1006
Skąd: Wrocław
Wysłany: 2006-05-05, 10:44   

_Brutus napisał/a:
co to w ogóle znaczy

difftime( time_t timer2, time_t timer1 );
tak to wyglada w C no i to ci po prostu oblicz różnicę czasu pomiędzy timer1 a timer2 przy czym timer2 to jest ten większy : ) rezultat jest w sekundach.
weź jakiegoś borlanda czy coś i tam w helpach masz chyba wszytsko opisane, często korzystam : ) albo po necie jest pełno stronek z opisanymi funkcjami w C/C++

z kolei w nokii mamy coś takiego jak timestamp to jest 4 bajtowa liczba wskazująca aktualny czas w sekundach np 2006-05-05 11:35:24 to timestamp wynosi ADE0C27C itd
czyli jeśli wystarcza ci rezultat w sekundach to robisz coś takiego:
dla pierwszego mierzonego czasu:
Kod:
unsigned int timer1=get_timestamp();

a dla drugiego tak samo:
Kod:
unsigned int timer2=get_timestamp();

potem tylko
Kod:
int roznica = timer2 - timer1;
i już ; )
ale to ma 2 wady: dokładność jednej sekundy no i zegar musi być ustawiony

inaczej to by trzeba jakoś na timerach to zrobić, hmm

[ Dodano: 2006-05-05, 12:02 ]
no jakiś tam timer czy coś na ten kształt
Kod:
static const unsigned moj_timer=MSG_LICZNIK;

i powiedzmy że chcesz mieć dokładnośc ok. 0.008s x 13 = 0.104s ≈ 0.1s
no to mamy
Kod:
#define cos_tam 13 // albo co innego. 1 sekunda to ok 125 czyli sobie z proporcji ustal :p

jakies hunger_start i hunger_finish się jeszcze przydadzą i timer (potem objasnie po co ten timer)
Kod:
int hunger_start, hunger_finish, timer;

potem sobie uruchamiasz ten timer
Kod:
own_timer_start(&moj_timer,TT_MESSAGE,cos_tam);

ale masz
Kod:
case MSG_LICZNIK:
{
   // cos tam jesli trzeba
   own_timer_start(&moj_timer,TT_MESSAGE,cos_tam);
   timer++;
   break;
}

czyli będzie on sobie w kółko tykał ; )
i teraz byśmy chcili np mieć nasz czas hunger_start no to hunger_start = timer;
potem dla drugiego w momencie który chcemy hunger_finish = timer;
no i róznica to po prostu hunger_finish - hunger_start ale wynik żeby był w sekundach to trzeba pomnożyć przez 0.104s
można troszkę prościej, jesli timer wystartuje dokłądnie w momencie hunger_start a kiedy chcemy zmierzyć hunger_finish
to bedzie on równy dokładnie wartości zmiennej timer, wtedy zmienne hunge start i finish sa niepotrzebne

tyle co wiem na ten temat

[ Dodano: 2006-05-05, 12:08 ]
druid napisał/a:
bedzie on równy dokładnie wartości zmiennej timer

oczywiście tylko pod warunkiem że zatrzymiesz to swoje cykadło:
own_timer_abort(&moj_timer);
bo inaczej by dalej doliczał
^
 
     
_Brutus 
Moderator
dragon podśmiechujek



Telefon: Samsung Ace II
Operator: Plus
Pomógł: 49 razy
Wiek: 27
Dołączył: 20 Lis 2005
Posty: 1191
Skąd: Łódź
Wysłany: 2006-05-05, 16:46   

Hmm :] trochę zjarzyłem :] tak właśnie myślałem, że to tak działa.

Z tymi timerami, to chyba nie za bardzo, bo to chodzi o cyberpeta i on musi porównywać czasy teraźniejszy, aktualny z zapisanym w eeprom'ie wcześniej. Tylko, że to kolejna zmienna do eeprom'a

Kod:
struct cyberpet
{
   UWORD age;
   float health;
   UBYTE hunger;
   UBYTE affection;
   UBYTE behaviour;

   float poo_incident_chance;
   bool pet_sick;
   bool pet_dead;
   bool pet_attention;
   bool poo_incident;
};


A to wszystko trochę zajmuje :[

Zamieszczam źródła, jakby ktoś miał jakiś pomysł, propozycję, to proszę bardzo... Tylko w c, bez żadnych bibliotek, bez grafik, itp, ale jakby ktoś chciał, to dam.
^
 
  Skype
     
druidbartek 
Expert



Telefon: DCT-3
Operator: Era
Pomógł: 39 razy
Wiek: 31
Dołączył: 13 Wrz 2005
Posty: 1006
Skąd: Wrocław
Wysłany: 2006-05-05, 16:52   

_Brutus napisał/a:
i on musi porównywać czasy teraźniejszy, aktualny z zapisanym w eeprom'ie wcześniej

no to najlepsze rozwiązanie to jest z różnica timestampów i tyle, wynik masz w sekundach mozesz go sobie na minuty godziny zamienić i tyle, co do reszty - nie mam pojęcia bo się nigdy w żadnego cyberpeta czy co to jest wogóle nie bawiłem i nie wiem co tam naprawde jest potrzebne
^
 
     
_Brutus 
Moderator
dragon podśmiechujek



Telefon: Samsung Ace II
Operator: Plus
Pomógł: 49 razy
Wiek: 27
Dołączył: 20 Lis 2005
Posty: 1191
Skąd: Łódź
Wysłany: 2006-05-05, 17:29   

T otaki zwierzak, co go trza chodować na kompie, karmisz, usypiasz itp ;] kiedyś takie sprzedawali, takie małe pieski elektroniczne, i to trza było się tym opiekować :]

[ Dodano: 2006-05-05, 18:30 ]
cyberpet - inaczej tamagoczi :]
^
 
  Skype
     
druidbartek 
Expert



Telefon: DCT-3
Operator: Era
Pomógł: 39 razy
Wiek: 31
Dołączył: 13 Wrz 2005
Posty: 1006
Skąd: Wrocław
Wysłany: 2006-05-06, 11:59   

no to poczytaj dokładnie o tym i zastanów się które zmiene muszą być zapisane tak naprawde w epromioe - na pewno czas kiedy ostatnio dawałeś żreć czy jakoś tak, ale część parametrów to na pewno jakieś pochodzne właśnie tej różnicy czasu czy coś

tak wogóle na niektóych fonach wolnego eepromu jeszcze jest sporo (np w 5510 ponad 3,5kB) ale wtedy byś stworzył pierwszą grę na dct3 z minimum requirements :D
^
 
     
_Brutus 
Moderator
dragon podśmiechujek



Telefon: Samsung Ace II
Operator: Plus
Pomógł: 49 razy
Wiek: 27
Dołączył: 20 Lis 2005
Posty: 1191
Skąd: Łódź
Wysłany: 2006-05-06, 18:46   

druidbartek napisał/a:
na niektóych fonach wolnego eepromu jeszcze jest sporo (np w 5510 ponad 3,5kB)


Wiem, bo sam mam 55, :] i dlatego pomyślałem, żeb takie cuś se zrobić :] ale np. 5110, to kiepsko ma :/

druidbartek napisał/a:
wtedy byś stworzył pierwszą grę na dct3 z minimum requirements :D

Trudno, niektórzy mają, inni nie mają :P :]
^
 
  Skype
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Podobne tematy
Temat Autor Forum Odpowiedzi Wysłany
Brak nowych postów Przyklejony: Zmiana oprogramowania + PL Menu za po... smefrik BB5 178 2008-02-07, 18:18
Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi [n95] nie można wykonać połączenia arus104 BB5 16 2008-11-25, 21:18
Brak nowych postów Przejęcie kontroli nad kompem za pomo... EMEK Software 5 2008-12-20, 11:08
Brak nowych postów soft N73 na N73 Me za pomocą Phoenixa... Piotrek222 BB5 5 2009-03-30, 06:39
Brak nowych postów Problem z flashowaniem za pomocą phoe... e_colin BB5 4 2009-05-06, 16:26