Lamarmottedu73
Messages postés19Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention14 mai 2009
-
28 nov. 2007 à 15:13
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 2009
-
29 nov. 2007 à 11:13
Salut tlm, j'ai un petit problème de fichier j'ai une idée pour le résoudre mais je ne trouve pas comment le faire. Voici le problème :
Un programme génère des fichiers et les copies dans un dossier.
Le 2eme programme via un thread lit ces fichiers au fur et à mesure qu'ils arrivent, puis les déplaces. Seul problème c'est que défoit le 2eme programme est trop rapide par rapport au programme 1 et zou "Violation d'accés" car il accède encore au fichier.
Ma solution serait de tester si le fichier est fermé et que je peux y accéder sans problème, mais je ne trouve pas comment le faire.
Lamarmottedu73
Messages postés19Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention14 mai 2009 28 nov. 2007 à 16:27
Re finalement c'est good méthode un peu bourrin mais ça marche et ça donne cela
while (1=1) do
begin
Handle := FileOpen(Fichier_a_ouvrir, $0040); //On essaye d'ouvrir le fichier en mode exclusif
if Handle <> -1 then //Si le résultat est différent de -1 cela veux dire que cela à marché
begin
FileClose(Handle); //On ferme le fichier
//*** Faire ce qu'il y a à faire ***//
end;
end;
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 28 nov. 2007 à 20:39
petite question, pourquoi while (1=1) do et pas while true do ?
autre chose, il serait peut etre judicieux de faire un sleep dans ta boucle pour ne pas surcharger le systeme de fichier, et peut etre aussi de mettre un nombre de boucles max, au cas ou ton fichier reste ouvert par l'autre programme
Lamarmottedu73
Messages postés19Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention14 mai 2009 29 nov. 2007 à 10:46
Salut en fait c'est juste un code exemple c'est pas le final !!! sinon je risque d'assoir la machine !!! Mais tes remarque sont judicieuse ... Pour le while (1=1) do en fait c'est une conneri qu'on avait fait en BTS IRIS avec des potes.
A bientôt
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 29 nov. 2007 à 11:13
salut,
ce genre de system (utiliser une fichier comme moyen de communication entre deux programme) est pas terrible, lent (accès disque) et souvent problematique (concurrence).
Il existe des moyen de partager des info entre processus (par ex: filemap). Perso, je trouve que UDP peut être un très bon moyen (simple, assez rapide). surtout pour un serveur (après tu peux bouger un des processus sur une autre machine en 2min). Evidemment cela dépend de ce que tu veux faire et de ton environnement.
réflèchit, et demandes toi si tu ne peux pas remplacer ce système par qqch de plus propre.
bon code,
Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.