Probleme WaitForSingleObject + vb6

thesbr Messages postés 5 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 26 août 2004 - 25 août 2004 à 15:01
thesbr Messages postés 5 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 26 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 ??

merci pour votre aide.

2 réponses

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
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.

@+

E.B.
0
thesbr Messages postés 5 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 26 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) !!

merci de nouveau pour ta réponse.

.seb.
0
Rejoignez-nous