thesbr
Messages postés5Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention26 août 2004
-
25 août 2004 à 15:01
thesbr
Messages postés5Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention26 août 2004
-
26 août 2004 à 09:53
bonjour a tous.
j'ai un petit soucis de comprehension. je possede VisualBasic 6 sous win2000.
je debute sous vb et je souhaite faire du MultiThread.
j'utilise les fonctions CreateThread(...) et WaitForSingleObject(...) qui fonctionnent bien.
MAIS, la fonction WaitForSingleObject(...) ne fonctionne qu'en mode 'debug'. Le code Executable genere (Natif ou P-code) entraine une erreur d'execution.
voici une partie du code de la routine du thread:
[b]
Do While loc_true = true
loc_dw = WaitForSingleObject(loc_ev, 200)
If loc_dw = WAIT_OBJECT_0 Then
loc_true = False
Else
If loc_dw = WAIT_TIMEOUT Then
loc_str = String(64, vbNullChar)
loc_ret = DLL_ReadDATA(loc_str)
If loc_ret = 1 Then
' print loc_str
Else
(...)
End If
End If
End If
Loop
[b]
la variable loc_ev correspond a l'handle de terminaison.
la fonction DLL_ReadDATA(...) est une fonction importee d'une DLL
ecrite avec VC++.
Un test m'a permis de verifier que l'executable compile en p-code
'plante' apres l'appel a la fonction WaitForSingleObject(...), tandis que le code compile en Natif 'plante' durant la fonction.
Pourquoi mon code 'plante'?
Quelles sont les differences entre les codes compiles: p-code et natif?
existe-t-il une autre solution ??
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 25 août 2004 à 17:23
Cherche pas plus loin... le multithread en vb6 c'est impossible !
je te donnerais bien le lien sur l'article officiel qui parle de la particularité de la machien virtuelle et de son thread unique mais je le trouve plus...
pour ton info c'est pas WaitForSingleObject qui plante mais bien
CreateThread et comme tu l'as dit on ne peut s'en apercevoir qu'apres compilation
la difference entre p-code et natif reside dans la construction de l'exe final avec le p-code les données sont stocké sous forme de pseudo instruction qui vont etres chargé et executé par la machine virtuelle une sorte d'emulation quant au code natif ce sont des instructions assembleur comme n'importe quel autre programme (avec les appel d'api en plus). le p-code est a bannir il est present dans le vb6 pour garder une compatibilité avec les applications vb5 existante.
thesbr
Messages postés5Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention26 août 2004 26 août 2004 à 09:53
E.B. bonjour et merci ,
la solution MultiThread --> MultiProcess [ CreateProcess(...) ] fonctionne-t-elle ?
Si oui, comment réaliser une action de lecture (sur modele IPC) non bloquante avec VB6 ??
et bien sur,
merci pour la difference entre p-code et code natif. dorénavant, je bannirai le p-code à tout jamais (en espérant tout de même ne plus avoir de code à faire sous VB) !!