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

Services Windows Discussion :

Thread et Timer


Sujet :

Services Windows

  1. #1
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut Thread et Timer
    Bonjour,
    Dans un service windows, je dois exécuter des transactions ftp dans plusieurs threads.
    On m'a conseillé de faire un System.Threading.Timer pour exécuter l'appel de façon cyclique.

    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
      public class ThreadManager : IDisposable
        {
            internal List<CustomersCluster> AllCustomers { get; private set; }
            private List<Thread> _threads;
     
            public ThreadManager(List<CustomersCluster> allCustomers)
            {
                AllCustomers = allCustomers;
            }
     
            public void GenerateThreads()
            {
                if (AllCustomers != null)
                {
                    _threads = new List<Thread>();
                    foreach (CustomersCluster cluster in AllCustomers)
                    {
                        FileMovingManager fmm = new FileMovingManager(cluster);
                        Thread thread = new Thread(new ThreadStart(fmm.Start));
                        thread.Start();
                    }
                }
            }
     
            public void Dispose()
            {
                if (_threads != null)
                    foreach (Thread t in _threads)
                        t.Abort();
     
                AllCustomers = null;
                _threads = null;
            }
        }
    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
    public class FileMovingManager
        {
            private CustomersCluster _customers;
            private List<MailSender> _mails;
            public static string MailSendFrom { get; set; }
            public static string SmtpServer { get; set; }
            private Timer _timer;
     
            public FileMovingManager(CustomersCluster customers)
            {
                _customers = customers;
                _autoEvent = new AutoResetEvent(false);
            }
     
            public void Start()
            {
                TimerCallback loopProcess = new TimerCallback(this.Execute);
                _timer = new Timer(loopProcess, null, _customers.Interval, _customers.Interval);
     
                //this.Execute(new Object());
            }
     
            public void Stop()
            {
                _timer.Dispose();
            }
     
            private void Execute(object o)
            {
    [...]
    Mais ça ne marche pas Execute n'est jamais appelée...

    un coup de main ?

    merci d'avance
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Je ne connais pas le système mais je pense qu'il faut lancer une première fois l'évènement.

    En regardant

    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx

    et

    http://msdn.microsoft.com/fr-fr/libr...esetevent.aspx

    Tu ne penses pas qu'il faille fait un set pour lever l'évènement?

  3. #3
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Merci, ce point là est résolu.
    maintenant, il ne reste qu'à déployer ce service avec installutil, mais encore un drame :

    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319>installutil C:\Xlog\Projects\Cross
    log\Tools\FileGetter\Crosslog.Tools.FileGetter\Crosslog.Tools.FileGetter.FileGet
    terService\bin\Release\Crosslog.Tools.FileGetter.FileGetterService.exe
    Microsoft (R) .NET Framework Installation utility Version 4.0.30319.1
    Copyright (c) Microsoft Corporation. Tous droits réservés.


    Exécution d'une installation traitée avec transaction.

    Début de la phase d'installation de l'installation.
    Consultez le contenu du fichier journal pour l'avancement de l'assembly C:\Xlog\
    Projects\Crosslog\Tools\FileGetter\Crosslog.Tools.FileGetter\Crosslog.Tools.File
    Getter.FileGetterService\bin\Release\Crosslog.Tools.FileGetter.FileGetterService
    .exe.
    Le fichier se trouve à C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.Tools
    .FileGetter\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslog.Too
    ls.FileGetter.FileGetterService.InstallLog.
    Installation de l'assembly 'C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.
    Tools.FileGetter\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslo
    g.Tools.FileGetter.FileGetterService.exe'.
    Les paramètres affectés sont*:
    logtoconsole =
    logfile = C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.Tools.FileGette
    r\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslog.Tools.FileGet
    ter.FileGetterService.InstallLog
    assemblypath = C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.Tools.File
    Getter\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslog.Tools.Fi
    leGetter.FileGetterService.exe
    Installation du service Daemon Ftp en cours...
    Création d'une source EventLog Daemon Ftp dans le journal Application...

    Une exception s'est produite lors de la phase d'installation.
    System.Security.SecurityException: La source est introuvable mais certains ou l'
    ensemble des journaux des événements n'ont pas pu faire l'objet d'une recherche.
    Journaux inaccessibles : Security.

    La phase de restauration de l'installation a commencé.
    Consultez le contenu du fichier journal pour l'avancement de l'assembly C:\Xlog\
    Projects\Crosslog\Tools\FileGetter\Crosslog.Tools.FileGetter\Crosslog.Tools.File
    Getter.FileGetterService\bin\Release\Crosslog.Tools.FileGetter.FileGetterService
    .exe.
    Le fichier se trouve à C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.Tools
    .FileGetter\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslog.Too
    ls.FileGetter.FileGetterService.InstallLog.
    Restauration de l'assembly 'C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.
    Tools.FileGetter\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslo
    g.Tools.FileGetter.FileGetterService.exe'.
    Les paramètres affectés sont*:
    logtoconsole =
    logfile = C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.Tools.FileGette
    r\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslog.Tools.FileGet
    ter.FileGetterService.InstallLog
    assemblypath = C:\Xlog\Projects\Crosslog\Tools\FileGetter\Crosslog.Tools.File
    Getter\Crosslog.Tools.FileGetter.FileGetterService\bin\Release\Crosslog.Tools.Fi
    leGetter.FileGetterService.exe
    Restauration de l'état précédent du journal des événements pour la source Daemon
    Ftp.
    Une exception s'est produite lors de la phase de restauration du programme d'ins
    tallation System.Diagnostics.EventLogInstaller.
    System.Security.SecurityException: La source est introuvable mais certains ou l'
    ensemble des journaux des événements n'ont pas pu faire l'objet d'une recherche.
    Journaux inaccessibles : Security.
    Une exception s'est produite lors de la phase de restauration de l'installation.
    Cette exception est ignorée et la restauration se poursuit. Cependant, l'ordina
    teur ne sera pas totalement restauré à son état initial à la fin de la restaurat
    ion.

    La phase de restauration est terminée.

    L'installation traitée avec transaction est terminée.
    L'installation a échoué et la restauration a eu lieu.
    je commence à désepérer sur ce projet ...
    merde, mon premier projet dans ma nouvelle boite
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  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 : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    A la base, je ne vois pas bien l'utilité du Timer ici.

    Le plus simple est peut être (comme souvent) de partir du début : quel besoin fonctionnel doit remplir ce service ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Le besoin est de créer un deamon ftp qui tourne en boucle dans un service windows avec un accès récurrant aux fichier à un interval défini.

    Tout le code est terminé. (enfin presque)

    Il ne me reste qu'un problème : une erreur 1053 au démarrage du service (même le problème décrit dans mon poste précédent est réglé).
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par kheironn Voir le message
    même le problème décrit dans mon poste précédant est réglé.
    Oublie pas de mettre la correction, ça peut peut être aider quelqu'un

  7. #7
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Citation Envoyé par matrix_ceg Voir le message
    Oublie pas de mettre la correction, ça peut peut être aider quelqu'un
    pour le déploiement : faire un projet install (voir ce tuto)

    pour la 1053
    C'était une connerie... le mauvais projet défini comme projet de démarrage
    Il faut, bien sûr, mettre le service comme projet de démarrage
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

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

Discussions similaires

  1. threads vs timer ?
    Par unluckymannn dans le forum Qt
    Réponses: 12
    Dernier message: 14/05/2007, 12h05
  2. thread ou timer ou ?
    Par ziz2005 dans le forum MFC
    Réponses: 2
    Dernier message: 19/11/2006, 10h54
  3. [swing] Probleme de thread avec Timer
    Par issou dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 13/05/2006, 23h52
  4. [MFC] Thread et timer
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 18/04/2005, 14h03
  5. Module Threading, utilisation timer(x,y) .
    Par aladin46 dans le forum Général Python
    Réponses: 3
    Dernier message: 02/01/2005, 19h55

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