Menu sous visual basic

Signaler
Messages postés
24
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2008
-
Messages postés
492
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
25 avril 2007
-
Bonjour,

je voudrais savoir si quelqu'un à un remède pour mon problème:

En fait j'ai une application dans laquelle j'utiliser un timer (vb) pour écrire et lire dans une base de donnée le plus rapidement possible. Et le problème c'est quand je sélectionne le menu de ma form vb, le timer se bloque. Puis quand je quitte mon menu il repart.

Y a-t-il une astuce?

Merci

9 réponses

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
21
Mais pourquoi utilises-tu un timer pour écrire dans une DB ? Je ne vois pas ce que tu fais exactement ?

Christophe R.
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
21
Mais pourquoi utilises-tu un timer pour écrire dans une DB ? Je ne vois pas ce que tu fais exactement ?

Christophe R.
Messages postés
24
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2008

En fait, c'est pour faire une simulation d'un serveur OPC.

Ce Timer permettra de lire en permanence l'état des machines de mon projet.
Ces machines renvoient à mon serveur OPC leurs infos via un réseau Profibus.

Mais le problème c'est que pour l'instant je n'ai pas reçu le matériel (automate, capteur,carte profibus....). Du coup je simule via un base de données Access les états du serveur OPC.

C'est un peu compliqué mais je dois le faire.
Messages postés
306
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
15 février 2016

tu devrai faire ton propre timer

Private Declare Function GetTickCount Lib "kernel32" () As Long

Dim TMR_Enabled As Boolean

Private Sub RunTimer(TMR_Interval)
TMR_Enabled = True
Dim Cur_Time As Long
Dim Next_Time As Long
Cur_Time = GetTickCount
Next_Time = Cur_Time + TMR_Interval
Do While TMR_Enabled
    If Next_Time <= Cur_Time Then
        TIMER_SUB
        Next_Time = Cur_Time + TMR_Interval
    End If
    Cur_Time = GetTickCount
    DoEvents
Loop
End Sub

private sub TIMER_SUB()
' code a executer ici
End sub


en voila un exemple, pour l'utiliser, tu met RunTimer(500)
et pour le stopper, tu met TMR_Enabled = false

voila

K@zuya 8-)
Messages postés
306
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
15 février 2016

tu devrai faire ton propre timer

Private Declare Function GetTickCount Lib "kernel32" () As Long

Dim TMR_Enabled As Boolean

Private Sub RunTimer(TMR_Interval)
TMR_Enabled = True
Dim Cur_Time As Long
Dim Next_Time As Long
Cur_Time = GetTickCount
Next_Time = Cur_Time + TMR_Interval
Do While TMR_Enabled
    If Next_Time <= Cur_Time Then
        TIMER_SUB
        Next_Time = Cur_Time + TMR_Interval
    End If
    Cur_Time = GetTickCount
    DoEvents
Loop
End Sub

private sub TIMER_SUB()
' code a executer ici
End sub


en voila un exemple, pour l'utiliser, tu met RunTimer(500)
et pour le stopper, tu met TMR_Enabled = false

voila

K@zuya 8-)
Messages postés
306
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
15 février 2016

ah, j'oubliais, ne met pas run_timer dans Form_Load sinon, ton appli na va pas s'affichier, met le dans Form_Activate au plus tôt
K@zuya 8-)
Messages postés
24
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2008

Merci pour ton aide mais ça fait la même chose.
J'ai l'impression que le menu vb prend la main et ne la rend plus à mon application tant qu'il est est déployé!

???????????????????????
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
En effet, les menus prennent la main.

Essaie de placer le timer dans une autre Form (cachée) et si ca ne regle pas ton problème,

Une solution qui fonctionne serait le MultiThreading.

le timer et le menu seraient en effet dans deux threads differentes donc, aucun soucis. SI tu as besoin d'infos sur le multithreading, regardes sur le net, et tu trouvera très certainement un exemple de code VB sur [mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
Messages postés
492
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
25 avril 2007
5
il y a quelque chose qui me parait bizard, j'utilise VB6.0 sous Windows XP et moi mon menu n'interromp pas mon timer (ce qui n'est pas le cas d'un msgbox par exemple...) c'est a dire que toutes les 2 sec, j'ai mis un timer qui m'affiche un msgbox "Bonjour"...(pour voir) pis j'ai mis un menu comprenant 1 sous menu (tout ca avec le createu de menu pour que le programme attende un choix). Ben toutes les 2 sec, il ferme l'arboresence du menu s'il est ouvert et affiche "Bonjour" (mais a ce moment la, l'exectution du timer est interrompue...) Voila, donc je c pas si c'est ce que tu cherches a faire ou si c'est moi qui ai pas tout compris...
(C'etait juste pour info...)