IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

attendre la fin d'un procédure local avant de la réxécuté


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2013
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 229
    Points : 109
    Points
    109
    Par défaut attendre la fin d'un procédure local avant de la réxécuté
    Bonjour

    J'ai la proc suivante qui s’exécute et j'aimerais que quand je rappel cette proc attendre la fin de de cette proc avant de la ré-executer .


    J'ai essayé les threadexecute mais plante en threadexecute

    a partir de ExécuteThreadPrincipal la proc marche mais je ne sais pas détecter la fin de la proc

    J'ai bien essayé avec une variable "TraitementEnCours " avec une boucle tanque mais cela bloque l'éxécution de la proc en cours


    voila merci de votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    PROCEDURE affichage_tableau(num est une chaîne)
     
    TraitementEnCours = Vrai
     
    TableDePolyvalence.Colonne4..Libellé = ""
     
    //structure de la table
    //Formatage Colonne
    i est un entier = 4
    J est un entier
    nombreColonne est un entier = 0
    NumCouleur est un entier = 1
    MetierGeneral est une chaîne
     
     
    //supression colonne ligne existant
    TableSupprimeTout(TableDePolyvalence)
     
    SI TableDePolyvalence..NombreColonne > 4 ALORS
    	nombreColonne =TableDePolyvalence..NombreColonne
    	POUR k = 5 TO nombreColonne
    		ChampSupprime({"TableDePolyvalence.Colonne" + k})
    	FIN
     
    FIN
     
    TableDePolyvalence.Colonne1..Titre = ""
    TableDePolyvalence.Colonne1..Largeur = "150"
     
     
    //clonage et nomage des titre colonne avec les nom des metiers
    Requête_Select_Metiers.ParamLigne = num
    HExécuteRequête(Requête_Select_Metiers,hRequêteDéfaut)
    HPremier(Requête_Select_Metiers)
    nombreColonne = HNbEnr(Requête_Select_Metiers)
     
    POUR TOUT Requête_Select_Metiers 
     
    	{"TableDePolyvalence.Colonne" + i}..Largeur = 40
    	{"TableDePolyvalence.Colonne" + i}..Libellé = Requête_Select_Metiers.NomMetiers
     
    	//	{"TableDePolyvalence.Colonne" + i}[1] =  Requête_Select_Metiers.MetiersGeneral
    	i = i + 1
    	SI i <= nombreColonne + 3 ALORS
    		ChampClone(TableDePolyvalence.Colonne4,"Colonne"+i)
    		Temporisation(1,tempoTimer)
    	FIN
    FIN
     
    i= 4
    Requête_Select_Metiers.ParamLigne = num
    HExécuteRequête(Requête_Select_Metiers,hRequêteDéfaut)
    HPremier(Requête_Select_Metiers)
     
     
    TableAjouteLigne(TableDePolyvalence)
     
    {"TableDePolyvalence.Colonne" + 1}[1] = "Personnel"
     
    TableDePolyvalence.Colonne2..Titre = ""
    TableDePolyvalence.Colonne2..Largeur = "100"
    {"TableDePolyvalence.Colonne" + 2}[1] = "Poste"
     
    TableDePolyvalence.Colonne3..Titre = ""
    TableDePolyvalence.Colonne3..Largeur = "100"
    {"TableDePolyvalence.Colonne" + 3}[1] = "Type Contrat"
     
    POUR TOUT Requête_Select_Metiers 
    	{"TableDePolyvalence.Colonne" + i}[1] =  Requête_Select_Metiers.MetiersGeneral
    	i = i + 1
    FIN
     
     
    MetierGeneral = {"TableDePolyvalence.Colonne" + 4}[1]
     
    POUR i = 4 A TableDePolyvalence..NombreColonne
     
    	J = i + 1
     
    	SI J = TableDePolyvalence..NombreColonne+1 ALORS
    		SORTIR
    	FIN
     
    	SI  {"TableDePolyvalence.Colonne" + i}[1] = MetierGeneral ET {"TableDePolyvalence.Colonne" + J}[1] = MetierGeneral ALORS
    		{"TableDePolyvalence.Colonne" + i}[1]..Fusion = fusionCelluleSuivante
    		//		{"TableDePolyvalence.Colonne" + i}[1]..CouleurFond = CouleurMetier[NumCouleur]
    	SINON
    		MetierGeneral = {"TableDePolyvalence.Colonne" + J}[1]
    	FIN
     
    FIN
     
    //TableDePolyvalence[1]..etat = Grisé
    TableDePolyvalence[1]..CouleurFond = GrisClair
     
    HExécuteRequête(Requête_Personnel_Ligne1,hRequêteDéfaut,ComboLigne.NomLigne..Valeur	)
    HLitPremier(Requête_Personnel_Ligne1)
     
    POUR TOUT Requête_Personnel_Ligne1 
    	TableAjouteLigne(TableDePolyvalence,Requête_Personnel_Ligne1.Personnel,Requête_Personnel_Ligne1.Poste,Requête_Personnel_Ligne1.Contrat)	
    FIN
     
    NombreDeColonne est un entier = 0
    NombreDeColonne = TableDePolyvalence..NombreColonne
    NombreDeLigne est un entier = 0
    NombreDeLigne = TableOccurrence(TableDePolyvalence)
     
    Fen_traitement_jauge.Lib_ligne_a_traiter = "Nombre de ligne à Traiter : " + NombreDeLigne
     
    SELON num
     
    	CAS "Global Usine"
    		POUR i = 4 A NombreDeColonne
    			POUR J = 2 A NombreDeLigne
    				TableDePolyvalence[J][i]..Valeur = "0"
    			FIN
    		FIN
     
    		POUR J = 2 A NombreDeLigne
    			Fen_traitement_jauge.Jauge1 = (100/NombreDeLigne)*J
    			Multitâche(-1)
    			Fen_traitement_jauge.lib_avancement = J
    			HExécuteRequête(Requête_select_metier_1_personnel,hRequêteDéfaut,TableDePolyvalence[J][1]..Valeur)
    			POUR TOUT Requête_select_metier_1_personnel
    				POUR i = 4 A NombreDeColonne
    					SI {"TableDePolyvalence.Colonne" + i}..Libellé = Requête_select_metier_1_personnel.Metiers ALORS
    						TableDePolyvalence[J][i]..Valeur = Requête_select_metier_1_personnel.Niveau_Poste
    						GOTO suivantglobal
    					FIN
    				FIN
    				suivantglobal :
    			FIN
     
    		FIN
     
    	AUTRE CAS
     
     
    		POUR i = 4 A NombreDeColonne
    			POUR J = 2 A NombreDeLigne
    				TableDePolyvalence[J][i]..Valeur = "0"
    			FIN
    		FIN
     
    		POUR J = 2 A NombreDeLigne
    			Fen_traitement_jauge.Jauge1 = (100/NombreDeLigne)*J
    			Multitâche(-1)
    			Fen_traitement_jauge.lib_avancement = J
    			HExécuteRequête(Requête_select_metier_1_personnel,hRequêteDéfaut,TableDePolyvalence[J][1]..Valeur)
    			POUR TOUT Requête_select_metier_1_personnel
    				POUR i = 4 A NombreDeColonne
    					SI {"TableDePolyvalence.Colonne" + i}..Libellé = Requête_select_metier_1_personnel.Metiers ALORS
    						TableDePolyvalence[J][i]..Valeur = Requête_select_metier_1_personnel.Niveau_Poste
    						GOTO suivantsecteur
    					FIN
    				FIN
    				suivantsecteur :
    			FIN
     
    		FIN
    FIN
     
    TraitementEnCours = Faux

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Si le but est de "mettre en attente" les appels successifs, tu peux utiliser une section critique.

    Sinon ThreadEtat() (de mémoire) permet de savoir si un thread est en cours d'exécution. Ainsi tu peux tester si la procédure tourne déjà avant de la relancer.

    Tatayo.

  3. #3
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bonjour,

    Tu peux regarder les signaux aussi

    Par contre, ta procedure me fait un peu peur... Manipuler des elements de l'IHM depuis un thread secondaire est plus que fortement déconseillé.

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2013
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 229
    Points : 109
    Points
    109
    Par défaut
    hello tlm

    WDKyle , j'ai essayé les signaux mais le pb

    en execution thread secondaire la proc ne marche pas , j'ai des erreur sur IHM bien sur

    sans thread ca marche

    avec ExécuteThreadPrincipal ca marche


    du coup je ne peux pas utiliser les thread secondaire et je ne suis pas capable en principal d'arréter la proc (ou d'attendre qu'elle se termine) !!!!

  5. #5
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    en entrée de procédure, tu as une variable (qui doit être impérativement globale) que tu intialise à vrai lorsque tu rentres dans cette procédure.
    Si elle est a vrai alors ton traitement est en cours et tu sors sinon tu exécutes ton traitement.
    Pense à remettre à faux ta variable en terminant ta procedure.
    Ni besoin de thread principal ni secondaire.
    Et le fait d'utiliser le multitache(-1) qui rend la main à Windows, fortement déconseillé dans ta procedure qui fait beaucoup. Ou alors, tu empeches l'accès à l'éléments qui appelle ta procedure....
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut

    As tu regardé du côté de : SI Threadetat(monthread) = threadencours ?

    Bonjour EDM Tahiti! cela fait un bail dis donc!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/10/2015, 10h00
  2. Attendre la fin d'un script externe avant de continuer le script python
    Par Mistervanhalen dans le forum Général Python
    Réponses: 1
    Dernier message: 18/03/2009, 16h05
  3. [JBoss] Attendre la fin du démarrage avant d'accepter des connexions
    Par Frédéric Bouchery dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 14/06/2007, 15h29
  4. [FLASH MX2004] [AS2] Attendre la fin de chargement d'un fichier avant de continuer.
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 01/03/2007, 15h13
  5. attendre la fin de chargement d'une page avant de continuer le script
    Par jibouze dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/06/2006, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo