Win32 console application plus rapide qu'une application Windows

Win32 console application plus rapide qu'une application Windows - C - Programmation

Marsh Posté le 08-08-2003 à 15:07:17    

Salut,
 
J'ai besoin de faire de la capture vidéo temps réel. Je travaille sous Windows 2000. Je dois écrire des images de 655Ko 25 fois par seconde. Cela me donne un débit d'écriture sur le disque d'environ 16Mo/s. Mon disque SCSI supporte largement cette vitesse d'écriture.  
J'ai, dans un premier temps, mis au point mon application dans une console WIN32, j'écris sur le disque avec la fonction putc(), bien plus rapide que fwrite() (J'ai fait des tests). Cela fonctionne parfaitement, toutes les images sont écrites sur le disque, la led clignote calmement, pas de problème.
J'ai ensuite porté mon application sous Windows avec la librairie graphique ILOG (peut importe la librairie utilisée, le problème est identique avec les MFCs). Et là impossible d'écrire avec ce débit, le disque s'emballe (led reste allumée), j'arrive à peine capture 25% des images. J'ai essayé d'ajuster le buffer avec setvbuf() sans succès.
Je pense que la gestion des flux est différente, peut être parce que le thread de l'application WINDOWS n'est pas aussi bas niveau qu'une console Win32.
Quelqu'un a-t-il une idée pour résoudre ce problème? Plus généralement, quelqu'un sait-il optimiser l'écrire de données sur un diques SCSI, sous Windows?
Merci d'avance, toutes suggestions est le bien venue.


Message édité par gladiator le 08-08-2003 à 15:10:13
Reply

Marsh Posté le 08-08-2003 à 15:07:17   

Reply

Marsh Posté le 08-08-2003 à 15:19:08    

Si tu veux aller vite travail avec des fichier mapper en mémoir. Et de toute façon c utopique d'écrire directement sur le disque dans un environement multi process.
Stocke les donnée en mémoire pour absorber les variation de vitesse d'écriture.


---------------
Le Tyran
Reply

Marsh Posté le 08-08-2003 à 15:25:47    

LetoII a écrit :

Si tu veux aller vite travail avec des fichier mapper en mémoir. Et de toute façon c utopique d'écrire directement sur le disque dans un environement multi process.
Stocke les donnée en mémoire pour absorber les variation de vitesse d'écriture.


 
Comment utilise-t-on des fichiers mappés en mémoire? As-tu un exemple? J'utilise du multi-threading (un thread qui capture et un thread qui écrit) pour palier à la variation de vitesse d'écriture, ce n'est donc pas recomandé?
Ton idée d'utiliser des fichiers mappé en mémoire est certainement bonne mais comment cela se fait il que cela fonctionne très bien dans une console WIN32?


Message édité par gladiator le 08-08-2003 à 15:26:14
Reply

Marsh Posté le 08-08-2003 à 15:32:13    

gladiator a écrit :


 
Comment utilise-t-on des fichiers mappés en mémoire? As-tu un exemple? J'utilise du multi-threading (un thread qui capture et un thread qui écrit) pour palier à la variation de vitesse d'écriture, ce n'est donc pas recomandé?
Ton idée d'utiliser des fichiers mappé en mémoire est certainement bonne mais comment cela se fait il que cela fonctionne très bien dans une console WIN32?


 
Pour les fichiers mappés regarde du côté de CreateFileMapping.
 
Tu peux garder ton architecture multi threadé à mon avis, maintenent faudrait voir comment tu fais coopérer tes thread.


---------------
Le Tyran
Reply

Marsh Posté le 08-08-2003 à 15:39:14    

LetoII a écrit :


 
Pour les fichiers mappés regarde du côté de CreateFileMapping.
 
Tu peux garder ton architecture multi threadé à mon avis, maintenent faudrait voir comment tu fais coopérer tes thread.


 
Le thread d'écriture attend un SetEvent venant du thread de capture (image capturé), puis il écrit l'image sur dans fichier. Pendant ce temps le thread de capture peux capturer l'image suivant.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed