Florenzau
Messages postés29Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention 8 février 2012
-
13 juin 2005 à 16:23
Florenzau
Messages postés29Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention 8 février 2012
-
15 juin 2005 à 09:56
Bonjour a vous!!!
Je souhaite appeler un Timer avec SetTimer(...) au MILIEU d'une boucle FOR;
Mais le probleme, c'est que le Timer ne se lance QU'APRES la boucle for( il se met dans la file d'attente);
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2005 à 17:54
Je t'explique la deuxième: GetTickCount te donne le nb de millisecondes ecoulées depuis que ta session est ouverte.
Je prends la valeur à un moment, puis je fais la différence avec le
nombre de millisecondes actuelle. 5 secondes après le premier appel à
GetTickCount, le test GetTickCount() - 5000 < 5000 sera vrai
Florenzau
Messages postés29Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention 8 février 2012 13 juin 2005 à 17:53
Je n'arrive pas à coder ton exemple, les parametres ne sont pas dans l'ordre, et il fait planter Visual!!
- J'utilise un prototype en debut de code pour nommer ma fonction callback?
- apres je met la definition de cette fonction plus bas (pour l'instant
vide car je ne sais pas comment elle fonctionne donc encore moins quoi
y mettre)
- et j'utilise cette fonction pour appeler mon timer mais comme la fonction est vide, il ne se passe rien!!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 juin 2005 à 18:20
Regarde ici:
http://www.cppfrance.com/code.aspx?id=23303 y a un SetTimer avec un callbackProc.
Quand on fournit un callbackProc pas obligé de fournir les 2 premiers params, 0 suffit.
Pour le reste, lire MSDN.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2005 à 11:14
Tu es bien sur qu'il faut utiliser un Timer pour ca? Pourquoi pas un
simple appel de fonction (tu dis qu'il doit être appelé pendant ton
algo et pas après).
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2005 à 11:51
Je dois mal comprendre, mais j'ai l'impression que tu n'a pas besoin
d'un timer. Pourquoi veux-tu en utiliser un en fait? On utilise les
timer pour faire un opération toutes les n millisecondes, or dans ton
cas je crois que tu n'en a pas besoin (de toutes facons, il serait
plutot étrange de créer un Timer dans une boucle, ca veut dire que va
créer plusieurs fois le même timer)
Florenzau
Messages postés29Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention 8 février 2012 14 juin 2005 à 11:52
En fait, mon programme est assez délika, je suis dans une boucle FOR,
et la j'appel un Timer, mais a un certain moment de ce timer, je dois
l'arreter pour en lancer un autre qui lui contient d'autre
fonction, c'est un peu chau à expliqueralors voila:
For (int i=0;i<nombre;i++)
{
<<Traitement>>
Demare TIMER1
<<Traitement>>
}
Timer1( )
{
<<Decomptage>>
<>
Test( )
Demarre TIMER2
Sinon
Retour dans le For
Fin Test
<>
}
Timer2 ( )
{
<<Lecture Port Serie>>
<<Traitement>>
}
Et la je pense que c plus clair a comprendre!! non?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2005 à 16:16
J'ai pas répondu avant parce que je comprenais pas trop, et je crois
que ca ne s'arrange pas avec ce schéma, je sais pas trop par ou
commencer. Je me demande si tu ne devrais pas utiliser des thread.
Une question tout d'abord:
For (int i=0;i<nombre;i++)
{
<<Traitement>>
Demare TIMER1
<<Traitement>> ce traitement commence quand? tout de suite ou quand timer1 est terminé??
Florenzau
Messages postés29Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention 8 février 2012 14 juin 2005 à 16:44
Il commence quand le timer est terminé
Mais tu me parles de thread, j'en ai entendu parler mais c tout!!
En fait, c'est une de mes premieres application sous visual, donc je suis encore débutant!!
Et je suis parti sur des timers parce que ca compte/decompte a un rythme fixe
pas comme une incrémentation de variable (vitesse CPU)
Maintenant, si tu me dis que ce serai mieu avec des thread je suis tout ouie; et je te remercie pour ta patience!!
L'algo que j'ai esaye de représenter consiste a envoyer des donnée (ca
tu l a compri) sur le port serie, a attendre pendant 5secondes au
maximum (timer1) une reponse du port (ACK) en cas de non-réponse,(
réenvoyer les données et attendre un ACK)x5;
Une fois le ACK recu, une date se décremente (au rythme d'un timer2 de 10ms de pas)
Quand le date est nulle, et que la carte sur port serie m'envoi son
"FIN" je dois envoyer une confirmation a cette carte, attendre un ACK,
et comme au début: en cas de non reponse, réenvoyer la confirmation 5
fois max pdt 5s max!
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2005 à 17:39
D'accord, en fait tu veux fixer une limite de 5 secondes pour recevoir un message.
Je pense que la fonction WaitForSingleObject devrait t'aider (désolé de
te donner des pistes différentes à chaque fois). Cette fonction te
permet d'attendre un evenement, avec un temps limite d'attente de
l'événement.
Mais il me reste une question: comment est tu mis au courant de
l'acceptation (ack)? Est à toi de vérifier le contenu d'un variable?
Si c'est le cas, j'ai une autre proposition:
DWORD dwTime = GetTickCount();
do
{
Sleep(10);
} while(GetTickCount() - dwTime < 5000 && !ack)
if(!ack) // pas de réponse
je mets le Sleep(10) pour ne pas monopoliser l'UC
Cette solution est assez simple, répond-elle à ton problème?