bonjour;
j'ai fait une recherche dans l'aide de c++builder pour une instruction equivalante de delay(50) "de c++" dans builder mais j'arrive pas a la trouvé alors aidez moi svp.
merci :-).
bonjour;
j'ai fait une recherche dans l'aide de c++builder pour une instruction equivalante de delay(50) "de c++" dans builder mais j'arrive pas a la trouvé alors aidez moi svp.
merci :-).
essaies Sleep(50);
Je suis du même avis,
j'ajoute juste une précision : le paramètre fourni désigne un temps en ms.
bien vu pour la nature du paramètre.
reste à savoir si celui de la fonction delay est aussi exprimé en ms.
oui delay est exprimé en ms et pour sleep(..) elle bloque l'execution pendon un temps donné mais delay peut difirencier entre deux instruction avec un temps precis...
pourquoi tu n'utilises pas delay(x) x en ms ?
Mais il ne me semble pas que delay soit exportée sous Builder car elle a été supprimée du fichier dos.h (issu de commandes DOS!!!)
L'instruction la plus approchante est bien Sleep, mais je ne comprends pas la distinction que tu fais entre ces deux instructions...
Est ce que tu aurais une autre action à effectuer avec un Timer ou une connection de type socket? Et effectivement dans ce cas, cette deuxième action ne peut pas se faire.
Il faut que je regardes... Si c'est bien là ton problème, je crois que j'ai réussi à le contourner au boulot avec une commande du type "ProcessMessages".
alors j'ai pas bien compris ce que tu dit mais je suis entrain de developper une application de simulation avec le port paralléle et j'ai besion de delay entre chaque envoie de donnée pour que le circuit puisse réagisse...
j'avais utilisé delay dans c++ mais maintenant je trouve pas l'equivalant de cette application .
alors peut-tu m'aidé SVP.
Salut,
Tu peux utiliser des Timers pour gérer ca avec des Flag. A la fin d'un envoie tu lance ton Timer et tu mets un Flag à false.
Lorsque ton Timer est terminé, tu met ton Flag à true. Ce Flag t'autorisera ou non à lancer ta communication pour une trame.
Builder fonctionne par thread, et il est vrai que le Sleep(50) bloquera pdt 50 ms la fonction. Ton Timer permettra de gérer ceci, mais attention, il se règle en ms mais il n'est pas très précis pour les petites valeurs (expl: 1ms).
Perso je fais de la communication sur Port Série et mes Delay sont devenus des Sleep.
Le fait que ton application ne puisse rien traiter d'autres durant la pause n'étant alors pas bloquant dans ton cas.
Je ne vois pas pourquoi le Sleep ne te conviendrait pas.
En revanche avec le Timer c'est beaucoup plus délicat car il faut identifier la communication en court pour que l'évènement Timer sache ce que tu es en train de faire sur la connexion.
Mattetfamilly
Son probleme se trouve sur un envoie de 2 trames trop rapprochées, je fais aussi de la COM sur port série et je suis d'accord qu'un Sleep convient, mais tout dépend de la manière dont il a rédigé sa fonction.
L'utilisation d'un Timer n'est pas plus complexe, juste un peu plus longue à mettre en oeuvre pour ce qui est à faire, mais elle peut marcher.
Si bonbino pouvait nous donner un peu plus de détail ou du code, on pourrait peut être mieux le conseiller.
deja moi j'utilise un temps de 1ms quand j'envoie la donnée et un temps de 2ms quand j'active le STROB.et même il faut que l'application ne fait rien pendant l'envoie des donnée.et voila la fonction en c++:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #define PORTS 0x37A #define PORTD 0x378je sais pas si ça marche avec un sleep car je doit l'utilisé plusieurs fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 sortie (int ii,int jj) { outport(PORTD,ii);//envoi donn‚e //la fct outport je la remplace avec DLPortIO1->Port [0x378]=ii; // j'utilise un composant pour ça delay(0); outport(PORTS,0x1); //selection latch donn‚e delay(2); //mais pour le delay ici je fait un pause d'execution outport(PORTS,0x3) ; //deselection delay(1); //outport(PORTD,0xff); //delay(0); outport(PORTD,jj);//envoi selection delay(0); outport(PORTS,0x2); //selection latch selection delay(2); outport(PORTS,0x3) ; //deselection delay(1); }
je vous remercié infiniment...
Balises de CODE rajoutées par henderson. Il faudra y penser la prochaine fois !
Salut !
Je ne sais pas si on ne pourrait pas utiliser GetTickCount ici ?
On commence par se synchroniser sur le début d'un ms
Transmission d'un octet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int start = GetTickCount(); while((GetTickCount()-start) == 0)
...
Donc on est dans le même ms qui doit s'écouler
Transmission d'un autre octet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 start = GetTickCount(); while((GetTickCount()-start) == 0)// attendre la fin du ms en cours
...
A plus !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 start = GetTickCount(); while((GetTickCount()-start) != 2)// attendre 2 ms
Je ne sais pas si le problème a été résolu, car je n'ai pas trop compris la plupart des réponses. Lol. Mais moi aussi j'aimerais avoir une solution pour remplacer la fonction delay.
En fait, la fonction delay reçoit comme paramètre un entier qui représente des ms. La fonction sleep reçoit comme paramètre un entier qui représente des secondes.
Si par exemple, je veux faire une pause de 1/10ème de seconde, je fais delay(100). Evidemment, comme la fonction delay n'existe plus dans les version plus récentes de dos.h, ça ne marche plus. J'ai lu au-dessus qu'on proposais d'utiliser sleep. Cependant, si j'écris sleep(100), ça fait une pause de 100 secondes. Comment faire des pauses en millisedondes???
Une précision quand même, vous parlez de la fonction "sleep" ou bien la fonction "Sleep" ?
gwe78 a ecrit:
La valeur passee dans la parenthese de la fonction Sleep() est en millisecondes et non pas en seconde, doncJe ne sais pas si le problème a été résolu, car je n'ai pas trop compris la plupart des réponses. Lol. Mais moi aussi j'aimerais avoir une solution pour remplacer la fonction delay.
En fait, la fonction delay reçoit comme paramètre un entier qui représente des ms. La fonction sleep reçoit comme paramètre un entier qui représente des secondes.
Si par exemple, je veux faire une pause de 1/10ème de seconde, je fais delay(100). Evidemment, comme la fonction delay n'existe plus dans les version plus récentes de dos.h, ça ne marche plus. J'ai lu au-dessus qu'on proposais d'utiliser sleep. Cependant, si j'écris sleep(100), ça fait une pause de 100 secondes. Comment faire des pauses en millisedondes???
Une précision quand même, vous parlez de la fonction "sleep" ou bien la fonction "Sleep" ?
delay(100); <--> Sleep(100); c'est la meme chose.
Il suffit de faire un essai pour s'en convaincre.
Mais je ne trouve pas la fonction "Sleep". Il existe une fonction "sleep" avec un "s" minuscule. Mais ça fait une pause en secondes, et non en milli-secondes.
Ha ben apparemment , la fonction Sleep (avec un "S" majuscule) nécessite un #include <windows.h>. Et, effectivement, ça marche exactement comme la fonction delay.
Merci beaucoup
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager