98 vs XP

ricky78 Messages postés 126 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 11 juillet 2006 - 20 janv. 2005 à 11:30
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 - 20 janv. 2005 à 19:52
Bonjour à tous

J'ai développé une application en visual C++ 6.0 capable de piloter un système RFID (identification de puce électronique). De base il s'agit d'échange de caractére sur le port de communication série.

Mon souci est le suivant, le programme en visual c++ 6.0 compilé et utilisé sur un pentium 2 à 200MHz sous windows 98 met pour l'identification environ 12s.
Le même programme en visual c++ 6.0 compilé et utilisé sur un pentium 3 à 733MHz sous windows 98 met pour l'identification environ 8s.
Le même programme en visual c++ 6.0 compilé et utilisé sur un pentium 4 à 2.8GHz sous windows XP met pour l'identification environ 30s.

Je ne comprend pas le problème, le pentium 4 a été vérifié avec norton , spybot, adaware,et optimiser avec tuneup 2004 sans résultats pour l'augmentation de la vitesse.

Y'a t il une différence au niveau du code ?
Y a til des priorité différentes pour gérer le port com entre XP et 98?
Je suis preneur de n'importe quel piste?

Merci à l'avance pour vos réponses.

TOCHE

6 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
20 janv. 2005 à 12:02
Tu utilise quoi comme fonction pour l'accès aux port (API ou dll spéciale) ?

Ensuite, s'il s'agit d'échange de caractères sur le port série, tu sera limité par la vitesse d'échange, donc :
- à quelle vitesse est le port série.
- quel est a peu près le nombre d'octets transférés.

pour attendre une réponse utilise-tu un thread, une boucle while qui lit en permanence ou une fonction d'attente de l'API ?
0
ricky78 Messages postés 126 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 11 juillet 2006
20 janv. 2005 à 12:36
Merci de ta réponse

Pour acceder au port j'utilise les fonctions
WriteFile(); et ReadFile();

le port série est définit à travers une structure DCB ayant 57600 bauds

Le programme est completement synchrone un envoi d'un caractére puis réception d'un caractére. Le temps entre l'émission et la réception est invariable et n'entre pas en compte pour la différence de vitesse.

la différence est uniquement le temps de traitement du programme entre la derniere reception et la prochaine emission. ce temps varie de 2ms à 8ms en fonction du pc et de l'os et je ne sait pas ce qui gere ce temps.

TOCHE
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
20 janv. 2005 à 12:43
Tu crée bien Avec CreateFile sans FILE_FLAG_OVERLAPPED ?

Tu peux essayer d'appeler FlushFileBuffers après l'envoi du caractère.

Les temps que tu donne sont en s ou ms. Pour mesurer + présisément les temps, regarde du coté de QueryPerformanceCounter et QueryPerformanceFrequency.
0
ricky78 Messages postés 126 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 11 juillet 2006
20 janv. 2005 à 14:19
Je vais essayer le Flushfilebuffers

Les temps sont en Seconde pour le temps de traitement du prog et en Milliseconde pour les temps entre chaque emission reception.

Je ne connait pas Queryperformance counter et queryperformance frequency, peux tu SVP etre plus explicite
merci encore !!!

TOCHE
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
20 janv. 2005 à 14:24
Ces fonctions permette de récupérer un compteur système plus précis que GetTickCount qui renvoi des ms.

QueryperformanceCounter revoi la valeur actuelle du compteur.
QueryperformanceFrequency récupère le nombre de tick par seconde (constante pour la machine).

utilisation :
__int64 start, ent, freq;

QueryperformanceCounter((LARGE_INTEGER*)&start);
.....
QueryperformanceCounter((LARGE_INTEGER*)&end);

QueryperformanceFrequency((LARGE_INTEGER*)&freq);
double time = ((double)(end-start))/freq;
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
20 janv. 2005 à 19:52
D'un autre côté vu la taille de ses mesures en secondes, je ne pense
pas qu'utiliser QueryPerformanceCounter() soit vraiment utile ^^

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
0
Rejoignez-nous