Bonjour,

Je me heurte a un petit problème gênant dans une application multi thread.

Voici un résumé succinct de ce que l'application est sensée faire :
1. Lorsque l'utilisateur appuie sur le bouton Start:
- Un répertoire prédéfini sera monitoré via la classe TDirectoryMonitor (http://www.osnews.com/story/7376/A_D..._Delphi/page1/) et dès qu'une image .tif est ajoutée, un traitement sera effectué sur cette image. (Cf. point 2) Nous appellerons ce répertoire le répertoire INPUT
- Un répertoire prédéfini sera monitoré via la même classe et dès qu'un fichier .txt est ajouté, un traitement sur ce fichier texte sera effectué. Nous appellerons ce répertoire le répertoire OUTPUT.
2. Le traitement de l'image se fait via le lancement d'une application en ligne de commande (Via CreateProcess et les info trouvées ici : http://www.developpez.net/forums/d39...uperer-retour/) Les info retournées sur la console par l'application en ligne de commande sont sauvegardées dans un fichier de log. (Contrôlé par une sémaphore) L'application en ligne de commande génère un fichier texte qui sera sauvé dans le répertoire OUTPUT.

Voici au niveau code comment est structurée l'application :
FMain (Formulaire principal) lance FMonitoringIput, FMonitoringOutput et FReadConsoleOuput, qui sont tous les 3 des threads.

Les deux premiers tournent sans problème et réagissent correctement à l'ajout de fichiers. Le problème vient de FReadConsoleOutput. J'ai tenté de le lancer à partir de FMonitoringInput (L'application en ligne de commande se lance lorsqu'il y a un fichier image .tif qui arrive dans INPUT) mais son lancement bloque l'arrivée des messages venant de l'ajout d'un fichier dans INPUT. (Donc si j'ajoute un fichier dans INPUT puis un autre avant que l'application en ligne de commande n'ait fini sont traitement, le message semble perdu et le fichier n'est pas traité)

J'ai tenté de Mettre FReadConsoleOutput dans FMain et de créer un Stack (Thread Safe) où je push mes infos pour le lancement de l'application en ligne de commande mais ça bloque dès le lancement du thread FReadConsoleOuput qui ne veut pas rendre la main à FMain.

J'aimerais savoir comment faire pour gérer ce cas de figure, soit, en plus simple :
App => Thread1 => Thread3 (Tout en permettant à Thread1 de continuer à recevoir des messages et stacker les infos pour le lancement de Thread3 séquentiellement)
App => Thread2

J'espère avoir été clair, sinon, n'hésitez pas à demander plus d'info... je bloque vraiment sur ce coup-là et le Delphi est loin d'être mon langage de prédilection.

Merci d'avance,

S.