#1 Le 30/12/2008, à 01:36
- samu_ariss
Gestion temps en C sur linux/windows (débutant)
Depuis mon passage à ubuntu j'ai découvert une nouvelle passion, la programmation avec C
(je suis le tuto du site du zero)
J'ai commencé à faire un mini programme en mode console avec ce que j'ai appris.
Mais il, doit gérer le temps car:
1) Dans le menu il affiche la date
2) Dans le mini jeu, il chronomètre le temps que la personne met à finir le jeu. Et si il dépasse 5 min, le jeu s'arrête.
Lors de mes recherches sur le forum, j'ai trouvé gettimeofday() mais il n'est pas compatible avec windows (mes amis ne pourrons pas y jouer).
Donc si vous pouviez m'aider
Merci d'avance
Mais quel comique !
http://fr.youtube.com/watch?v=S76pHIYx3ik&feature=related
Hors ligne
#2 Le 30/12/2008, à 03:33
- nicolas66
Re : Gestion temps en C sur linux/windows (débutant)
Hum perso j'ai une classe C++ de gestion du temps compatible Linux et Windows. Je peux te filer ça par mail si tu veux.
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#3 Le 30/12/2008, à 11:21
- rniamo
Re : Gestion temps en C sur linux/windows (débutant)
regarde les signaux (kill en programmation linux) ou les timer (dans des librairies tel gtk+ par exemple)
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#4 Le 30/12/2008, à 12:18
- vladisback
Re : Gestion temps en C sur linux/windows (débutant)
si, si il me semble bien que gettimeofday est compatible avec windows
voila une fonction qui te renvoi le temps en ms, par contre sous windows la precision est bien limité (autour de 15ms dans mon cas il me semble), mais pour l'usage que tu veux en faire ce devrait être suffisant.
#include <stdio.h>
#include <sys/time.h>
#include <ctime>
int getMsTime()
{
timeval timev;
gettimeofday(&timev, NULL);
return timev.tv_sec*1000+timev.tv_usec/1000;
}
Dernière modification par vladisback (Le 30/12/2008, à 12:18)
Hors ligne
#5 Le 30/12/2008, à 12:46
- rniamo
Re : Gestion temps en C sur linux/windows (débutant)
oui mais tu vas faire ramer ton jeu alors qu'un timer est si confortable :http://www.gtk.org/tutorial1.2/gtk_tut-20.html#ss20.5
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#6 Le 30/12/2008, à 15:21
- philou8237
Re : Gestion temps en C sur linux/windows (débutant)
Le problème de gettimeofday() c'est qu'il a pour conséquence de scheduler ton application. En gros, à chaque appel, ton application pert la main sur le CPU, et une autre la remplace.
Utilise en effet plutot un timer.
Hors ligne
#7 Le 30/12/2008, à 20:54
- Plokta
Re : Gestion temps en C sur linux/windows (débutant)
Pour windows j'utilise ce code:
double
CurrentTimeSec()
{
FILETIME fileTime;
GetSystemTimeAsFileTime( &fileTime );
int64 val = int64(fileTime.dwLowDateTime) + (int64(fileTime.dwHighDateTime)<<32);
double time = val / 10000000.0;
return time;
}
Pour Linux et MacOSX:
#include <sys/time.h>
double
CurrentTimeSec()
{
struct timeval currenttime;
gettimeofday( ¤ttime, 0 );
return currenttime.tv_sec + currenttime.tv_usec/1000000.0;
}
Je sais, je sais, retourner un double n'est pas vraiment élégant, mais c'est pour l'exemple...
Dernière modification par Plokta (Le 30/12/2008, à 21:02)
Hervé ADAM
http://www.tvpaint.fr
Hors ligne
#8 Le 30/12/2008, à 22:14
- nicolas66
Re : Gestion temps en C sur linux/windows (débutant)
Le code que j'utilise :
timer.h
#ifndef __TIMER_H__
#define __TIMER_H__
#include <cstdlib>
#ifndef _WIN32
# include <sys/time.h>
#else
# include <windows.h>
#endif
class CTimer
{
private :
#ifndef _WIN32
timeval m_AbsoluteTime;
#else
LARGE_INTEGER m_AbsoluteTime, m_TicksPerSecond;
#endif
public :
CTimer();
void Init();
double Time() const;
};
#endif //__TIMER_H__
timer.cpp
#include "timer.h"
CTimer::CTimer()
{
Init();
}
void CTimer::Init()
{
#ifdef _WIN32
QueryPerformanceFrequency(&m_TicksPerSecond);
QueryPerformanceCounter(&m_AbsoluteTime);
#else
gettimeofday(&m_AbsoluteTime,NULL);
#endif
}
double CTimer::Time() const
{
double ElapsedTime;
#ifdef _WIN32
LARGE_INTEGER NewTime;
QueryPerformanceCounter(&NewTime);
ElapsedTime = (double(NewTime.QuadPart) - double(m_AbsoluteTime.QuadPart)) / double(m_TicksPerSecond.QuadPart);
#else
timeval NewTime;
gettimeofday(&NewTime,NULL);
ElapsedTime = (NewTime.tv_usec - m_AbsoluteTime.tv_usec) / 1000000. + NewTime.tv_sec - m_AbsoluteTime.tv_sec;
#endif
return ElapsedTime;
}
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#9 Le 31/12/2008, à 00:25
- Izanami
Re : Gestion temps en C sur linux/windows (débutant)
Regarde dans la Glib. Comme c'est une bibliothèque portable il deverai pas avoir de problème.
#10 Le 31/12/2008, à 22:20
- rniamo
Re : Gestion temps en C sur linux/windows (débutant)
oui, regarde mon lien . portable et approuvé
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#11 Le 31/12/2008, à 22:20
- rniamo
Re : Gestion temps en C sur linux/windows (débutant)
oui, regarde mon lien . portable et approuvé
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne