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

C# Discussion :

WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);
    Voilà j'expose monprobl-me, je suis en train de mettre en, place en place un exécutable qui en appellera d'autres pour cela j'ai trouvé un code (personnalisé depuis) qui me gère le tout via des p/Invoke comme suit:
    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
    public static class Launcher
        {
            public static Logger logger = LogManager.GetLogger("Launcher");
            public class ProcessInfo
            {
                public IntPtr hProcess;
                public IntPtr hThread;
                public IntPtr ProcessID;
                public IntPtr ThreadID;
            }
     
            [DllImport("CoreDll.DLL", SetLastError = true)]
            private static extern int CreateProcess(String imageName, String cmdLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, Int32 boolInheritHandles, Int32 dwCreationFlags, IntPtr lpEnvironment, IntPtr lpszCurrentDir, byte[] si, ProcessInfo pi);
     
            [DllImport("coredll")]
            private static extern bool CloseHandle(IntPtr hObject);
     
            [DllImport("coredll")]
            private static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);
     
            [DllImport("coredll.dll", SetLastError = true)]
            private static extern int GetExitCodeProcess(IntPtr hProcess, ref int lpExitCode);
     
            public static String GetApplicationPath()
            {
                string codebase = Assembly.GetExecutingAssembly().GetName().CodeBase;
                return Path.GetDirectoryName(codebase);
            }
     
            /// <summary>
            /// Permet d'accéder à un fichier lié à notre application sur l'appareil cible (TSP).
            /// </summary>
            /// <param name="filename">Nom du fichier à accéder.</param>
            /// <returns>Chemin d'accès sur l'appareil.</returns>
            public static String GetPathToApplicationFile(String filename)
            {
                string appDir = GetApplicationPath();
                return Path.Combine(appDir, filename);
            }
            public static void LaunchApp(string strPath, string strParms)
            {
                try
                {
                    ProcessInfo pi = new ProcessInfo();
                    byte[] si = new byte[128];
                    logger.Info("lancement du process");
                    //String pathExe = GetPathToApplicationFile(strPath);
                    CreateProcess(strPath, strParms, IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, si, pi);
                        WaitForSingleObject(pi.hProcess, 0xFFFFFFFF);
                    int exitCode = 0;
                    GetExitCodeProcess(pi.hProcess, ref exitCode);
                    CloseHandle(pi.hProcess);
                    CloseHandle(pi.hThread);
                }
                catch (Exception ee)
                {
                    logger.Error(ee);
                }
     
                return;
            }
    }
    Et là ou j'ai du mal c'est sur la gestion de la méthode WaitForSingleObject.
    Alors voici mes questions:
    - à quoi coorepond le type uint (msdn m'a rine donné de convaincant ou compréhensif),
    et faut-il forcémennt mettre les millisecondes en hexa?
    si oui quelle est la valeur decimal de 0xFFFFFFFF et aurriez-vous de leins de conertisseurs (automatiques )sur le net.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par zerobug Voir le message
    - à quoi coorepond le type uint (msdn m'a rine donné de convaincant ou compréhensif),
    unsigned integer (entier non signé). Un int (Int32) a une plage de valeurs de -2147483648 à 2147483647, un uint (UInt32) a une plage de valeurs de 0 à 4294967295
    Citation Envoyé par zerobug Voir le message
    et faut-il forcémennt mettre les millisecondes en hexa?
    Non, tu l'écris comme tu veux. C'est juste la représentation dans le code qui change, le résultat de la compilation sera le même que tu mettes la valeur en hexa ou en décimal
    Citation Envoyé par zerobug Voir le message
    quelle est la valeur decimal de 0xFFFFFFFF
    4294967295 en uint
    -2147483648 en int
    Mais dans le cas de la fonction WaitForSingleObject, 0xFFFFFFFF veut dire "infini", c'est à dire qu'il n'y a pas de time-out (cf. la doc de la fonction)

    Citation Envoyé par zerobug Voir le message
    aurriez-vous de leins de conertisseurs (automatiques )sur le net.
    la calculatrice windows (en mode scientifique)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Merci tomlev pour ces élémnets de réponses.

Discussions similaires

  1. Problème de mutex avec Waitforsingleobject non-bloquant
    Par rvzip64 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 03/11/2005, 11h02
  2. [MFC] Convertion de UINT en unsigned __int64
    Par mickael08 dans le forum MFC
    Réponses: 1
    Dernier message: 28/06/2005, 22h41
  3. Réponses: 3
    Dernier message: 26/02/2005, 09h33
  4. Question concernant l'API "WaitforSingleObject
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 29/03/2003, 07h26
  5. Probleme de WaitForSingleObject
    Par Bbenj dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 02/08/2002, 09h57

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