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 :

Comment utiliser les primitives d'attente de pompage (par exemple CoWaitForMultipleHandles)


Sujet :

VB.NET

  1. #1
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 317
    Par défaut Comment utiliser les primitives d'attente de pompage (par exemple CoWaitForMultipleHandles)
    Bonjour

    Dans mon programme j'utilise plusieurs thread et depuis peu j'ai ce curieux message de temps en temps et le programme s'arrête sans donné de numéro de ligne. Il suffit parfois de valider en cliquant sur continuer pour que le programme reprenne la main.

    Le message : "Assistant Débogage managé 'ContextSwitchDeadlock' *: 'Le CLR n'a pas pu effectuer de transition du contexte COM 0x1028fe8 au contexte COM 0x1028f30 pendant 60 secondes. Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter une opération très longue sans pompage des messages Windows. Cette situation a généralement des effets négatifs sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la mémoire. Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives d'attente de pompage (par exemple CoWaitForMultipleHandles) et pomper de manière régulière les messages lors des opérations qui sont longues à s'exécuter.'"

    Ce qui est curieux : les 60 secondes dont il est question dans le commentaire ? Faut-il régler un paramètre de VB.net ?

    A toute fin utile je vous donne des extraits du code appelant les threads qui semble-t'il doivent être complété. Oui mais par quoi ?

    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
    Option Explicit On
     
    Imports System.Threading
    Imports System.IO
    Imports System.Runtime.InteropServices
    Imports System.Text.RegularExpressions
     
    '............'.
     
    Public Class Form1
     
        <DllImport("user32.dll")>
        Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
        End Function 'pour positionner la fenêtre de pywin64.exe
        <DllImport("user32.dll")>
        Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal windowName As String) As Boolean
        End Function 'pour changer le titre de la fenêtre de pywin64.exe
     
    '...........'.
     
     Public Sub StartResolution()
     
            If tTask1 IsNot Nothing Then tTask1 = Nothing
            tTask1 = New System.Threading.Thread(AddressOf Task1)
            tTask1.IsBackground = True
            tTask1.Start()
     
        End Sub
     
    '...........'.
     
     Public Sub Task1()
            Try
     
                Using myProcess2 As New Process
     
                    myProcess2.StartInfo.FileName = Disk + "\notepad.exe"
     
                    If ValidAutoSolution = True Then
                        myProcess2.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
                    Else
                        myProcess2.StartInfo.WindowStyle = ProcessWindowStyle.Normal
                    End If
                    myProcess2.Start() 'start process exe
                    Thread.Sleep(50)
     
                    'dimensionne la fenêtre cmd sous windows :
     
                    SetWindowPos(myProcess2.MainWindowHandle, IntPtr.Zero, 1201, 0, 720, 1000, 0)
     
                End Using
            Catch ex As Exception
            End Try
     
        End Sub
     
     
    '.........'.
     
     Private Function KillProcess(ByVal ProcessName As String) As Boolean
     
            Try
                Dim svc As Object
                Dim sQuery As String
                Dim oproc
                svc = GetObject("winmgmts:root\cimv2")
                sQuery = "select * from win32_process where name='" & ProcessName & "'"
                For Each oproc In svc.execquery(sQuery)
                    Dim v = oproc.Terminate
                Next
                'svc = Nothing
            Catch ex As Exception
            End Try
     
     
        End Function
    Merci d'avance pour votre aide et idées.

    A+

  2. #2
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 317
    Par défaut
    Bonsoir,

    Personne n'a une idée ? De mon coté cela se produit de temps en temps et je ne trouve pas la raison.

  3. #3
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 317
    Par défaut
    La réponse est simple:

    Lorsque le message s'affiche : Cliquer sur l'onglet "paramètres des exceptions" puis dé-cliquer (jusqu'à ce que la case devienne noir (pas avec une croix ou un carrée blanc!) le "Managed Debugging Assistants"

    Solution trouvé ici : https://social.msdn.microsoft.com/Fo...lehandlesquot-

    Si ça peut aider ....

    Bonne soirée

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

Discussions similaires

  1. Comment récupérer les données de cette page web (par exemple)
    Par emulamateur dans le forum VBA Access
    Réponses: 6
    Dernier message: 13/10/2009, 19h29
  2. Réponses: 4
    Dernier message: 13/12/2004, 20h37
  3. [COM] Comment utiliser les événements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 30/05/2004, 12h38
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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