Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile
(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). mad

Donc si vous pouviez m'aider

Merci d'avance big_smile


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( &currenttime, 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 wink. 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 wink. portable et approuvé


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne