Rechercher : dans
Par :

Fonction Wait en C++

Dernière réponse le 26 sep 2008 à 22:21:28 totodude, le 6 avr 2004 à 16:28:35 
 Signaler ce message aux modérateurs

Salut tout le monde,

j'ai un pb en C++. mon prog n'attend pas une ligne de commande, ce qui a pour effet qu'il continue comme si elle n'avait pas été la.

du coup je voudrais mettre un truc du genre "Wait(temps)"

quelqu'un connaitrai la commande et les parametres a passer ?

merci bcp

tom

Meilleures réponses pour « fonction Wait en C++ » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

femi, le 6 avr 2004 à 18:46:51

Tu peux utiliser une boucle for vide si tu ne comprends pas ecris moi therenegade01@hotmail.com

Répondre à femi

2

tafiscobar, le 6 avr 2004 à 18:51:30

Salut, si t'es sous windows, sleep.
si t'es sous unix, wait ou bien waitpid (fais un man).
Je ne peux pas t'aider plus, je ne comprends pas ta question.

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!

Répondre à tafiscobar

3

Tr1cH, le 6 avr 2004 à 22:55:00

Tu peux toujours utlisé getch();
ça va attendre jusqu'à ce que tu entre une donnée
au clavier.

ou tu peux toujours faire une boucle for comme l'a dit femi
genre:

for (int i=0; i<MAX_INT; i++)
{;}

fait des test pour voir la valeur de MAX_INT qui est la plus appropriée.

c'est tout ce que je peux dire...

Répondre à Tr1cH

4

totodude, le 7 avr 2004 à 17:47:28

Ben merci d'avoir regarder, mais j'ai trouver une astuce.

j'avais déjà essayer sleep, mais ca ne suffisait pas. en fait le système attendait le temps que je lui disait, mais il réalisait pas l'enregistrement.

j'ai pas essayer la boucle for vide

en fait j'ai ouvert une boite de dialogue et simuler l'apuie sur le bouton entrer direct (ainsi la boite n'a meme pas le temps de s'afficher qu'elle se ferme), et ca marche comme ca.
ca donne un truc du genre

kbevent(VB_RETURN,0,0,0);
AfxMessageBox("");


les parametre sont a vérifier, j'ai plus le code sous les yeux.

merci tt le monde

cheers
tom

Répondre à totodude

5

femi, le 8 avr 2004 à 19:25:57
  • +1

Ok je vois
mais la fonction getch() marche t elle corectement chez toi moi j'ai pas pu l'utiliser pour faire les fpause et attendre que l'utilisateur tape une lettre!

Répondre à femi

6

Ing. Ion Badea - ROUMANIE, CRAIOVA, ASP DOLJ, le 7 sep 2007 à 09:57:51

Avant
int main()
tu dois écrire
-------
# include <conio.h>
--------
puis,à l'interieur du main()
tu dois écrire, au point ou tu veux faire la pause :
--------
int = ch;
ch = _getch();
--------
C'est tout !

Répondre à Ing. Ion Badea - ROUMANIE, CRAIOVA, ASP DOLJ

7

mamiemando, le 7 sep 2007 à 10:07:54

L'idée de faire une boucle for vide est mauvaise car les ordis récents vont la passer quasi instanément même avec une grande valeur. De plus le comportement sera différent d'une machine à l'autre.

La commande wait ne sert pas à attendre un certain temps mais attends un signal (cf cours de système).
http://pwet.fr/man/linux/appels_systemes/wait

Voici une manière plus ou moins propre de faire et qui se comportera toujours de la même façon :

#include <ctime>
#include <iostream>

int main(){
    time_t t0 = time(NULL);
    unsigned tmax = 2;
    std::cout << "j'attends " << tmax << " secondes" << std::endl;
    while(static_cast<unsigned>(time(NULL)-t0) < tmax);
    std::cout << tmax << "s écoulées" << std::endl;
    return 0;
}

Le problème c'est que ta charge CPU reste à 100% pendant l'attente des 2 secondes ce qui est un peu dommage vu qu'on ne fait rien. C'est pour ça que faire une boucle est une mauvaise idée. En fait il faut simplement endormir ton processus pendant tmax secondes :
extern "C"{
    #include <unistd.h>
}
#include <iostream>

int main(){
    unsigned tmax = 2;
    std::cout << "j'attends " << tmax << " secondes" << std::endl;
    sleep(tmax);
    std::cout << tmax << "s écoulées" << std::endl;
    return 0;
}


Bonne chance

Répondre à mamiemando

8

Ing. Ion Badea - ROUMANIE, CRAIOVA, ASP DOLJ, le 7 sep 2007 à 10:33:23
  • +1

Merçi, c'est excellent !

Répondre à Ing. Ion Badea - ROUMANIE, CRAIOVA, ASP DOLJ

9

Ing. Ion Badea - ROUMANIE, CRAIOVA, ASP DOLJ, le 7 sep 2007 à 10:56:51

J'ai unue problème :
<unistd.h> n'est pas connue en Visual C++ 2005 ( implementation VISUAL STUDIO 2005 STANDARD EDITION ).
Ainsi, la secuence :

extern "C"{
#include <unistd.h>
}
#include <iostream>

int main(){
unsigned tmax = 2;
std::cout << "j'attends " << tmax << " secondes" << std::endl;
sleep(tmax);
std::cout << tmax << "s écoulées" << std::endl;
return 0;
}

ne marche pas.
Qu'on peut faire pour utiliser "sleep(tmax)" de la sequence ?

Répondre à Ing. Ion Badea - ROUMANIE, CRAIOVA, ASP DOLJ

10

mamiemando, le 7 sep 2007 à 15:11:34

Ah désolée, ça je sais pas. Trois solutions possibles :

1) Il faut trouver le header équivalent mais a priori c'est un header standard. Pour celà il faut lire la doc deVisual (et sur ce coup, n'ayant pas visual, je ne vais pas pouvoir t'aider).

2) Installe cygwin, ce qui te permettra d'avoir l'équivalent d'un environnement linux sous windows. Pour le coup ce header existera si tu compiles avec g++.
http://www.cygwin.com/

3) Autre possibilité, peut être la plus simple, utilise dev cpp à la place de visual C++, et je pense que ça marchera directement.
http://www.bloodshed.net/devcpp.html

Bonne chance

Répondre à mamiemando

11

 fantasiiio, le 20 jan 2008 à 19:04:47

Void Wait(double WaitTime)
{
double fTime,LastTime;

QueryPerformanceCounter(&TimeCur);
LastTime = (float)((double)(TimeCur.QuadPart-TimeStart.QuadPart)/(double)TimerFreq.QuadPart);
do
{
QueryPerformanceCounter(&TimeCur);
fTime = (float)((double)(TimeCur.QuadPart-TimeStart.QuadPart)/(double)TimerFreq.QuadPart);
}while(fTime-LastTime < WaitTime);
LastTime = fTime;
}

Répondre à fantasiiio