Attente sans consommer tout CPU en C++

Fermé
Pip Iiic Messages postés 48 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 23 décembre 2013 - 24 oct. 2011 à 22:36
Pip Iiic Messages postés 48 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 23 décembre 2013 - 2 nov. 2011 à 20:06
Bonjour,

Je souhaiterais mettre une attente dans une application en C++ entre 2 instructions sans consommer tout le CPU, et multi-platforme si possible.
Je m'explique :

Au tout départ, j'utilisais la fonction Sleep() de windows.h mais il semblerait qu'elle ne soit pas portable.
J'ai ensuite utilisé time.h en répétant une boucle infinie tant que le délai ne serait pas écoulé.

Malheureusement, là est le problème : il charge continuellement, et, de plus, il m'affiche un "*.exe ne répond pas", donc je ne peux pas fermer ma fenêtre et les utilisateurs penseront que mon programme possède une défaillance.

J'ai aussi essayé la fonction ping, mais cela ne change rien.

En vous remerciant par avance,

Pip Iiic
A voir également:

1 réponse

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
24 oct. 2011 à 22:45
Il y a sleep (unistd.h) qui fait à peu près pareil que Sleep (Winbase.h)
1
Pip Iiic Messages postés 48 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 23 décembre 2013 18
25 oct. 2011 à 08:57
Tiens donc, je me souviens de vous ! :D
Vous m'avez aidé lorsque que je souhaitais modifier la taille maximale d'une variable.

Merci de votre réponse rapide ; j'ai essayé votre méthode, malheureusement, comme vous l'avez dit, elle ne diffère guère de Sleep.

Il n'y a pas d'autre moyen ? Ou, du moins, d'éviter un "*.exe ne répond pas" ?
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
25 oct. 2011 à 09:17
La seule chose qui change avec sleep, c'est que c'est multi-plateforme contrairement à Sleep.

Mais si effectivement la seule chose que fait le programme c'est attendre, alors c'est normal qu'il ne réponde plus vu qu'il ne fait plus rien !

Il faudrait voir plus précisément ce que tu veux faire, mais je ne vois pas en quoi la fonction ping intervient...
0
Pip Iiic Messages postés 48 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 23 décembre 2013 18
25 oct. 2011 à 09:26
En fait je fais afficher une image un certain temps, et j'aimerais que durant ce temps il n'affiche pas qu'il ne répond plus.

La fonction ping me permet d'attendre un certain temps (ping localhost avec un temps de réponse que je définis) mais du côté utilisateur, cela ne change rien.
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
25 oct. 2011 à 09:53
Tu veux dire que tu fais system("ping ..."); c'est encore moins multiplate-forme qu'utiliser sleep !
Pour supporter sleep sous Windows il faudrait faire :

#ifdef __unix__
	#include "unistd.h"  // unsigned int sleep(unsigned int secondes)
#elif defined _WIN32
	#include "windows.h" // void Sleep(unsigned long milliSecondes)
	unsigned int sleep(unsigned int secondes)
	{
		Sleep(1000*secondes);
		return 0; // le temps est écoulé
	}
#endif


Je viens de faire quelques tests chez moi, mais même en attendant assez longtemps, Windows ne m'affiche pas que l'exe ne répond pas. Le problème vient peut-être de ton ping finalement...
0
Pip Iiic Messages postés 48 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 23 décembre 2013 18
25 oct. 2011 à 10:18
Non, non, je n'utilise pas la fonction ping, je l'ai simplement essayée.
Pour l'attente, j'utilise time.h pour l'instant, soit :

clock_t goal;
goal = nbSecondes * CLOCKS_PER_SEC + clock();
while(goal > clock())
{
}

Mais c'est une boucle infinie, ce qui est embêtant.
0