Tache de fond
Anonyme
Salut

Je travail sur une application de traitement des commandes et j'ai deux opération suivant :

Opération 1 : la saisie et le traitement manuellement des commandes.
Opération 2 Traitement des commandes génère par des terminaux (ces commandes sont au format Txt crée sur un répertoire) pour cela j'ai crée 2 procédures :
La premier récupère fichier par fichier de ce rép.
La deuxième traite chaque fichier récupère par la première procédure.

Comment faire pour lancer la 2 opération on tache de fond et continuer le traitement de l'opération 1

Pour cela j'ai essayé plusieurs scénarios

Scénario 1 : un timer et cela ne marche pas à cause volume des commandes parfois dépassant le délai du timer.

Scénario 2 : un thread qui lance un timer cela ne marche pas aussi

Alors je m'adresse a vous pour des idées et d'autres scénarios précis

Merci


Francoise

Contribution le : 19/03/2005 19:48
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Françoise,

Bien que techniquement l'utilisation d'un thread secondaire soit réalisable, pourquoi ne pas avoir un programme sans fenêtre qui s'occupe du traitement 2 avec un timer qui verifie la présence de fichier.
dès qu'un fichier est trouvés on arrête le timer on traite tous les fichiers puis on relance le timer.

Ce programme pourrait être lancé à l'execution du premier et fermé à sa fermeture.

Contribution le : 20/03/2005 08:52
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond
Anonyme
Très bon Scénario je vous remercie
Mais sur le plan technique puis avoir plus de détail ou juste un bout de code comment ou faut il lance le timer et ou faut il l’arrête voila ma procédure :

PROCEDURE LitDon()

FichierFic est chaîne
FichierTraitement est chaîne

FichierFic = fRep(gRepDon+"\*.txt")
TANTQUE FichierFic <>""
FichierTraitement = gRepDon+"\"+FichierFic
TraitementCommandeDon(FichierTraitement)
fSupprime(FichierTraitement)
FichierFic = fRep("")
FIN

Contribution le : 20/03/2005 12:26
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond
Anonyme
Très bon Scénario je vous remercie
Mais sur le plan technique puis avoir plus de détail ou juste un bout de code comment ou faut il lance le timer et ou faut il l’arrête voila ma procédure :

PROCEDURE LitDon()

FichierFic est chaîne
FichierTraitement est chaîne

FichierFic = fRep(gRepDon+"\*.txt")
TANTQUE FichierFic <>""
FichierTraitement = gRepDon+"\"+FichierFic
TraitementCommandeDon(FichierTraitement)
fSupprime(FichierTraitement)
FichierFic = fRep("")
FIN

Contribution le : 20/03/2005 12:26
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond

Inscrit:
19/11/2002 12:20
Post(s): 390
Question sûrement stupide, mais... Pourquoi un timer?

J'ai fait plusieurs applis qui scrutaient, ou des ports COM, ou des répertoires pour des fichiers texte, ou des sockets IP, et je ne m'ennuie pas à ne les déclencher que quand nécessaire (à part dans certains cas précis)...

Mais dans le cas des fichiers texte, le fait de chercher en boucle un fichier texte via un frep ne prends rien en temps CPU, donc je le fais tout le temps via un thread... Pas besoin de timer...

Contribution le : 20/03/2005 12:41
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond
Anonyme
Question stupide ou pas ce n’est pas ça le Pb l’important et que vous m’aidez a résoudre le problème.

Effectivement le Thread semble le plus approprie et j’ai déjà fait un teste :


Ds l’initialisation du projet :

ThreadExécute("Thread1", threadUtiliseHyperFile, "CommandeDon")


Procedure CommandeDon()

Tachedefond est un booléen = Vrai

TANTQUE Tachedefond
LitDon()
FIN

Procedure LitDon()

FichierFic est chaîne
FichierTraitement est chaîne

FichierFic = fRep(gRepDon+"\*.txt")
TANTQUE FichierFic <>""
FichierTraitement = gRepDon+"\"+FichierFic
TraitementCommandeDon(FichierTraitement)
fSupprime(FichierTraitement)
FichierFic = fRep("")
FIN


// Au lancement de l’application ça marche tous les fichier txt se trouvent sur le rep sont traitées mais pas ceux qui s’ajout a fur et a mesure de l’exécution du programme

Merci Francoise

Contribution le : 20/03/2005 13:48
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond

Inscrit:
19/11/2002 12:20
Post(s): 390
J'ai recrée un projet vide avec votre code (j'ai juste remplacé le gRepDon par un frepexe et le TraitementCommandeDon par un Trace(FichierTraitement) et ça marche, le programme traite les fichiers placés avant ET pendant l'exécution...

Faites un projet "tout neuf" avec votre exemple, et vous verrez que ça marche...

Petit conseil tout de même, placez la recherche des fichiers dans le thread lui même:
Tachedefond est un booléen = Vrai
FichierFic est chaîne
FichierTraitement est chaîne 

TANTQUE Tachedefond
 FichierFic = fRep(gRepDon+"\*.txt",frFichier)

 SI FichierFic <>""
  FichierTraitement = gRepDon+"\"+FichierFic
  TraitementCommandeDon(FichierTraitement)
  fSupprime(FichierTraitement)
 FIN

FIN

//sortie du thread, libération du répertoire...
frep("")


Contribution le : 20/03/2005 16:48
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond
Anonyme
Salut
Tout d’abord Merci de ton intérêt

J’ai bien suivi ton code mais cela ne marche pas pendant l’exécution programme
Alors je pense quelque chose stop le mon thread secondaire

Dans la fenêtre principale de mon thread principale j’ai crée un bouton avec le code suivant :
Info( ThreadEtat("Thread1") ) afin de connaître l’état de mon thread secondaire mais je reçois -1

Avez-vous une idée ?


pour la fin du thread et liberation du rep c'est dans fermeture du projet ne c'est pas ?

Contribution le : 20/03/2005 18:46
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond

Inscrit:
19/11/2002 12:20
Post(s): 390
-1 est la valeur de threadinexistant...
Cela veut dire que votre thread... n'existe plus à ce moment, donc cela veut dire que quelque part, dans votre algo, vous "sortez" ou vous "fermez" le thread "thread1"...
Il faut regarder de ce côté... Soit un ThreadArrête, soit une condition dans votre boucle qui est remplie et que le fait sortir du thread, un truc du genre:
toto est un booleen =vrai


tantque toto=vrai
 
 //on a un cas qui nous fait sortir de la boucle, et donc le thread s'arrête tout seul...
 si no_commande=2 alors toto=faux
fin

Ou bien un "goto":
toto est un booleen =vrai


tantque toto=vrai
 
 //on a un cas qui nous fait sortir de la boucle, et donc le thread s'arrête tout seul...
 si no_commande=2 alors goto exit_thread
fin


exit_thread:


Donc a priori il ne doit pas être bloqué (par un problème avec des sémaphores par exemple) car sinon threadetat reverrait une autre valeur...

Contribution le : 21/03/2005 01:10
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond
Anonyme
Merci Imama de ta collaboration

J’ai finalement trouve le Bp En effet ma premier fenêtre du projet dans le thread principale j’utilise la fonction « Utilise » qui stoppe le fonctionnement de mon thread secondaire

Merci infiniment a vous et a tout personne qui m’a répondu sur ce forum

Francoise

Contribution le : 22/03/2005 00:37
Créer un fichier PDF de la contribution Imprimer


Re: Tache de fond

Inscrit:
19/11/2002 12:20
Post(s): 390
Sans soucis ;)

Contribution le : 22/03/2005 15:08
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2