thyouston
Messages postés5Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention11 septembre 2006
-
11 sept. 2006 à 15:14
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
11 sept. 2006 à 17:00
Bonjour,
Pour situer, je débute complètement en developpement.
J'essaye de developper un outil de supervision à moindre frais.
Je bloque au niveau du developpement de l'agent à déployer sur les postes clients. Je n'arrive pas à lancer plusieurs requetes WMI simultanément et en temps réel.
J'ai essayé différentes solutions de multi-threading mais je tombe régulièrement sur des soucis d'exception WIN32 (j'ai lu que c'était du au fait que le l'utilisation de boucles et autres fonctions utilisées également le runtime).
J'ai essayé le DoEvents ou une solution palliative trouvée sur ce site mais le résultat est le même.
Voici le code:
Sub Main()
Dim eventCount, e As Integer
'on lit dans le fichier ini
eventCount = CInt(LireINI("SearchForEvent", "searches"))
If eventCount <> 0 Then
Do While True
For e = 1 To eventCount
SearchEvent (e)
Next
Loop
End If
End Sub
Private Sub SearchEvent(ByVal NbrEvent As Integer)
'fonction qui va chercher l'evenement
Dim objWMIService, objEvents, objLatestEvent As Object
Dim notifMail, NotifMessage, RunScript As Boolean
Dim namespace, targetInstance, eventClass As String
'on appelle toutes les requetes renseignées dans le fichier ini
namespace = LireINI("Event" & NbrEvent, "NameSpace")
targetInstance = LireINI("Event" & NbrEvent, "TargetInstance")
eventClass = LireINI("Event" & NbrEvent, "EventClass")
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\." & namespace)
'on renseigne la requete WMI
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM " & eventClass & " within 1 WHERE TargetInstance ISA '" & targetInstance & "'" & EnumCondition(NbrEvent))
Set objLatestEvent = objEvents.NextEvent
If Not objLatestEvent Is Nothing Then
'on verifie si des notifications ont été paramétrées
notifMail = CBool(LireINI("Event" & NbrEvent, "NotifMail"))
NotifMessage = CBool(LireINI("Event" & NbrEvent, "NotifMessage"))
RunScript = CBool(LireINI("Event" & NbrEvent, "RunScript"))
If notifMail = True Then
SendMail (NbrEvent)
End If
If NotifMessage = True Then
SendMessage (NbrEvent)
End If
If RunScript = True Then
UseScript (NbrEvent)
End If
End If
Set objEvents = Nothing
Set objLatestEvent = Nothing
Set objWMIService = Nothing
End Sub
si vous aviez des propositions pour pouvoir lancer plus d'une recherche simultanément, je serai heureux et ravi de les essayer pour vous.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 11 sept. 2006 à 16:36
Non le multithreading est instable sous l'IDE de vb6, mais en mode compilé, normalement, c'est aussi stable qu'un appli développée en C++, je dit en théorie car perso, je m'y suis jamais penché.
thyouston
Messages postés5Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention11 septembre 2006 11 sept. 2006 à 16:46
ben en fait ca ne marche ni sous l'IDE ni en compilé. Mais quand je fais un deboggage pas à pas, j'ai au moin l'erreur: en l'occurence, il me dit que ma requete WMI n'est pas resolvable alors qu'elle fonctionne sans aucun souci si je retire les fonctions de multi-threading.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 11 sept. 2006 à 17:00
Je ne dis pas que mon expérience vaut cas général, loin de là, je ne me considère pas comme un grand chef de la prog.
Néanmoins, le multithreading en VB6 , je n'ai jamais réussi à le faire marcher, sous l'ide ou en compilé. Les symtomes ? les jours ou ça allait c'était exception, ou vb qui se fermait sans rien dire, mais la plupart du temps c'était le sympatique BSOD
J'avais réussi à le faire en VB5, semble-t-il un peu plus tolérent en la matière. Mais ce qui semblait marché, finissait par planté au bout de quelques heures de fonctionnements continu.
Bref j'ai déporté ton mon code sensible en C dans une dll, et moyennant quelques précautions pource genre de travail, j'ai réussi à faire ce que j'avais besoin.
Conclusion pour moi : Multithreading et VB "classique", on y pense même pas.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #