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

VB.NET Discussion :

Application Console et Thread


Sujet :

VB.NET

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    D�tails du profil
    Informations personnelles :
    Localisation : France, Yvelines (�le de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Par d�faut Application Console et Thread
    Bonjour,

    Voila j'ai besoin de mettre en place une application multithread�e qui se lancera et s'arr�tera automatiquement. Pas besoin d'IHM, la console me semble une bonne solution.

    Mon application d�marre donc sur une Sub Main, dans celle-ci j'instancie un System.Timers.Timer qui va v�rifier la pr�sence de travail � faire et lancer les Threads (utilisation de d�l�gu�s) pour traiter le travail. Toute les 5 sec le Timer se lance et alimente les Threads, s'il n'y a plus de travail, le Timer ferme l'application (avec un gros "End", si il y a mieu je suis preneur) .

    Le pb est : comment "bloquer" l'ex�cution de Sub Main pour ne pas que l'application se ferme ? Dans mon Sub Main, une fois Le timer instanci� et activ� je n'ai plus rien � faire et si je quitte sub Main l'application se ferme.

    Actuellement je "bloque" avec un Console.ReadKey, j'aimerais savoir s'il existe mieux / plus propre.

    Merci de votre aide !!!

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 64
    Localisation : France

    Informations professionnelles :
    Activit� : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par d�faut
    Ben, si ton appli ouvre une console, c'est qu'� priori elle a une interaction utilisateur, donc le Console.ReadKey, ben c'est pas si mal

    Si tu n'as pas d'interaction utilisateur, tu n'as pas besoin de console, et tu fais un service, c'est fait pour cela.

    En effet, si tu n'as pas besoin d'interaction utilisateur, on ne voit pas bien pourquoi tu devrais logger la machine sur laquelle s'ex�cute l'appli.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    D�tails du profil
    Informations personnelles :
    Localisation : France, Yvelines (�le de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Par d�faut
    Si je ne bloque pas le programme va quitter sub main donc quitter l'application alors qu'il y a encore des threads de travail actifs.

    Autre petite question : les acc�s � Console sont type Thread Safe ? En d'autre therme puis-je faire des Console.WriteLine("Blabla") depuis plusieurs thread sans que cela ne risque de poser de probl�me (Cross Thread Exception o� autre chose de ce genre).


    Merci de ta r�ponse rapide

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 64
    Localisation : France

    Informations professionnelles :
    Activit� : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par d�faut
    Citation Envoy� par MaelstroeM Voir le message
    Si je ne bloque pas le programme va quitter sub main donc quitter l'application alors qu'il y a encore des threads de travail actifs.
    Ce n'est pas une obligation, tu peux faire une WaitAll sur des ManualResetEvent (ou n'importe quel autre objet de synchro) que tu auras allou� � chaque thread, et tu termines ton programme quand toutes les threads auront signal�s leur Event.

    Mais ce que je te disais, c'est que si on met une console, c'est que � priori on veut une interaction utilisteur (ici, le Console.ReadKey).

    Si tu ne veux pas d'interaction utilisateur, tu ne mets pas de console, tu mets ton programme en service.

  5. #5
    Expert �minent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    while not un_booleen
      'traitement
      system.threading.thread.sleep(x)
    end while
    le bool�en te permet de sortir quand tu le mets � true
    sleep arrete le thread pendant x ms
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 64
    Localisation : France

    Informations professionnelles :
    Activit� : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par d�faut
    Citation Envoy� par sperot51 Voir le message
    le bool�en te permet de sortir quand tu le mets � true
    sleep arrete le thread pendant x ms
    L'utilisation d'un WaitAll sur un tableau d'EventWaitHandle me semble quand m�me un peu moins bricolo, non ?

  7. #7
    Expert �minent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par d�faut
    Citation Envoy� par Bluedeep Voir le message
    L'utilisation d'un WaitAll sur un tableau d'EventWaitHandle me semble quand m�me un peu moins bricolo, non ?
    ca d�pend, dans les deux cas si c'est mal �crit ca d�conne et c'est pas terriblement maintenable

    m'enfin ca d�pend de ce qu'il y a � faire avec ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 64
    Localisation : France

    Informations professionnelles :
    Activit� : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par d�faut
    Citation Envoy� par sperot51 Voir le message
    ca d�pend, dans les deux cas si c'est mal �crit ca d�conne et c'est pas terriblement maintenable...
    C'est un fait, mais je ne pars jamais du postulat que les gens codent avec les pieds (dans les faits, il s'av�re souvent que je fais preuve d'un incorrigible optimisme )

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    D�tails du profil
    Informations personnelles :
    Localisation : France, Yvelines (�le de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Par d�faut
    Bon je suis partie sur qq chose de ce genre :

    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
     
    If args.Length >= 2 AndAlso UCase(args(1)) = "AUTO" Then
                    Console.WriteLine("Démarrage en Automatique")
                    Action_Start_Timer(False)
                End If
     
     
                While True
     
     
                    Select Case CStr(Console.ReadLine()).ToUpper
                        Case "START" : Action_Start_Timer(False)
     
                        Case "FORCE START" : Action_Start_Timer(True)
     
                        Case "STOP" : Action_Stop_Timer()
     
                        Case "CANCEL" : Action_Cancel()
     
                        Case "END" : Action_Cancel() : Exit While
     
                        Case Else : Console.WriteLine("Commande inconnue")
     
                    End Select
     
                    Thread.Sleep(0)
     
                End While
    Qui me permet de g�rer qq commandes simples.
    Si dans le Elapsed du timer il ne trouve plus de travail a envoyer il ferme l'application avec un "End", je n'ai rien trouv� de propre pour router l'information de fermeture au Sub_Main.

    Mes threads de travail sont g�r� avec des d�l�gu�s (voir exemple Prime Number Calculator dans MSDN) et sont aliment�s par le System.Timers.Timer qui se lance p�riodiquement.

    Par contre je suis curieux de voir ton system de "EventWaitHandle", bien que j'ai crois� �a dans MSDN quand je me suis interr�s� au multiThreading je n'ai pas creus� dans ce sens.

    Si j'ai bien compris je peux utiliser un EventWaitHandle , dans le Sub_Main j'attends avec WaitOne que le Timer signal via Set() qu'il n'y a plus de travaux et donc que je peux quitter l'application ?

    Dans tous les cas je vous remercie pour votre aide.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 15/05/2004, 18h33
  2. [Kylix] une application console
    Par naili dans le forum EDI
    R�ponses: 3
    Dernier message: 19/04/2004, 14h27
  3. [Delphi] Application "console" et caractères ASCII
    Par Yorys dans le forum API, COM et SDKs
    R�ponses: 2
    Dernier message: 31/07/2003, 09h50
  4. [Kylix] Kylix 3 et Applications console
    Par deniscm dans le forum EDI
    R�ponses: 2
    Dernier message: 14/01/2003, 13h37
  5. [Kylix] application console avec kylix 3 ?
    Par Hakim dans le forum EDI
    R�ponses: 4
    Dernier message: 15/11/2002, 22h45

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