OVH Cloud OVH Cloud

Problème avec DoEvents dans une boucle infinie

8 réponses
Avatar
Pierre Fauconnier
Bonjour ou bonsoir

J'ai développé un petit logiciel qui doit, chaque jour à minuit, réaliser
une tâche...

Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop


Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer lorsque je
ferme l'application ?

2. Ce processus fait monter l'utilisation de l'UC à 100%. Existe-t-il un
autre moyen qui n'utilise pas tout l'UC? Y-a-t-il danger à utiliser 100% de
l'UC ?

3. Comment puis-je faire pour transformer ce logiciel en "service" lancé au
démarrage de l'ordinateur ?


--
----
Merci dès à présent pour vos éclaircissements
----
Pierre Fauconnier
(remplacer NOSPAM par pfi pour me répondre. Merci)
"Les sept laids tuent..." ( Lewis Carol)


---

8 réponses

Avatar
François Picalausa
Bonjour/soir,

1/
http://faq.vb.free.fr/index.php?question

2/
Tu peux simplement utiliser un timer qui a chaque événement timer calculera
l'interval restant au timer...
(soit le max, soit quelques millisecondes)
Tu peux aussi ajouter des pauses dans ta boucle:
http://faq.vb.free.fr/index.php?question6

3/
http://faq.vb.free.fr/index.php?question
Pour démarrer un programme "normal" au démarrage de Windows, menu démarrer >
programmes > démarrage
ou dans le registre:
http://support.microsoft.com/default.aspx?kbid9365

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Pierre Fauconnier" a écrit dans le
message de news:
Bonjour ou bonsoir

J'ai développé un petit logiciel qui doit, chaque jour à minuit,
réaliser une tâche...

Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop


Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer lorsque
je ferme l'application ?

2. Ce processus fait monter l'utilisation de l'UC à 100%. Existe-t-il
un autre moyen qui n'utilise pas tout l'UC? Y-a-t-il danger à
utiliser 100% de l'UC ?

3. Comment puis-je faire pour transformer ce logiciel en "service"
lancé au démarrage de l'ordinateur ?


Avatar
Zoury
Salut Pierre! :O)

J'ai développé un petit logiciel qui doit, chaque jour à minuit, réaliser
une tâche...



avant même de lire le reste, as-tu songé au planificateur de tâches? Cela
évite que ton programme boucle à longueur de journée pour n'effectuer qu'une
tâche par jour..




Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop



..Date est un type de donnée... tu voulais écrire Now j'imagine? ;O)




Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer lorsque je
ferme l'application ?



Où se trouve le code? comment fermes-tu l'appli? Quel est le code de la
fonction TransfertFichier()? as-tu libérer tous tes objets?

regarde ce lien, si ce n'est déjà fait :

Pourquoi quand je ferme mon programme, celui-ci est encore présent dans la
liste des tâches ? Comment fermer proprement mon programme ?
http://faq.vb.free.fr/index.php?question




2. Ce processus fait monter l'utilisation de l'UC à 100%. Existe-t-il un
autre moyen qui n'utilise pas tout l'UC? Y-a-t-il danger à utiliser 100%


de
l'UC ?



Ajoute un appel de quelques millisecondes à la fonction Sleep() comme ceci :
'***
Option Explicit

Private m_bStop As Boolean
Private Declare Sub Sleep _
Lib "kernel32" _
( _
ByVal dwMilliseconds As Long _
)

Private Sub Form_Click()
m_bStop = True
End Sub

Private Sub Form_Load()
Call Me.Show
Do Until m_bStop
DoEvents
Call Sleep(10)
Loop
Call Unload(Me)
End Sub
'***




3. Comment puis-je faire pour transformer ce logiciel en "service" lancé


au
démarrage de l'ordinateur ?



Malheureusement pour toi ça n'est ni recommandé, ni supporté en VB..

INFO: Running Visual Basic Applications as Windows NT Services
http://support.microsoft.com/default.aspx?scid=kb;EN-US;175948

HOWTO: Use NTSVC.OCX from Visual Basic
http://support.microsoft.com/default.aspx?scid=kb;en-us;170883&Product=vbb




C'est pourquoi je te recommandes fortement le planificateur de tâches.

Ton programme se résumerait à ceci :
'***
' Module1
Option Explicit

Private Sub Main()
Call TransfertFichier
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
François Picalausa
Bonjour/soir,

Date n'est pas qu'un type!
c'est aussi une fonction qui renvoie le jour actuel.

En fait, il existe:
Date Data Type
Date Function -> Returns a Variant (Date) containing the current system
date.
Date Statement -> Sets the current system date.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Pierre! :O)

J'ai développé un petit logiciel qui doit, chaque jour à minuit,
réaliser une tâche...



avant même de lire le reste, as-tu songé au planificateur de tâches?
Cela évite que ton programme boucle à longueur de journée pour
n'effectuer qu'une tâche par jour..




Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop



..Date est un type de donnée... tu voulais écrire Now j'imagine? ;O)




Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer lorsque
je ferme l'application ?



Où se trouve le code? comment fermes-tu l'appli? Quel est le code de
la fonction TransfertFichier()? as-tu libérer tous tes objets?

regarde ce lien, si ce n'est déjà fait :

Pourquoi quand je ferme mon programme, celui-ci est encore présent
dans la liste des tâches ? Comment fermer proprement mon programme ?
http://faq.vb.free.fr/index.php?question




2. Ce processus fait monter l'utilisation de l'UC à 100%.
Existe-t-il un autre moyen qui n'utilise pas tout l'UC? Y-a-t-il
danger à utiliser 100% de l'UC ?



Ajoute un appel de quelques millisecondes à la fonction Sleep() comme
ceci : '***
Option Explicit

Private m_bStop As Boolean
Private Declare Sub Sleep _
Lib "kernel32" _
( _
ByVal dwMilliseconds As Long _
)

Private Sub Form_Click()
m_bStop = True
End Sub

Private Sub Form_Load()
Call Me.Show
Do Until m_bStop
DoEvents
Call Sleep(10)
Loop
Call Unload(Me)
End Sub
'***




3. Comment puis-je faire pour transformer ce logiciel en "service"
lancé au démarrage de l'ordinateur ?



Malheureusement pour toi ça n'est ni recommandé, ni supporté en VB..

INFO: Running Visual Basic Applications as Windows NT Services
http://support.microsoft.com/default.aspx?scid=kb;EN-US;175948

HOWTO: Use NTSVC.OCX from Visual Basic
http://support.microsoft.com/default.aspx?scid=kb;en-us;170883&Product=vbb




C'est pourquoi je te recommandes fortement le planificateur de tâches.

Ton programme se résumerait à ceci :
'***
' Module1
Option Explicit

Private Sub Main()
Call TransfertFichier
End Sub
'***


Avatar
Pierre Fauconnier
Bonjour François...

Merci pour tes réponses. Malheureusement, je n'arrive pas à me connecter à
la faq... :-((

Bon week-end.



--
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..." (Le Chat de
Geluck (enfin, je crois...))
(remplacer NOSPAM par pfi pour me répondre. Merci)


---

François Picalausa wrote:
Bonjour/soir,

1/
http://faq.vb.free.fr/index.php?question

2/
Tu peux simplement utiliser un timer qui a chaque événement timer
calculera l'interval restant au timer...
(soit le max, soit quelques millisecondes)
Tu peux aussi ajouter des pauses dans ta boucle:
http://faq.vb.free.fr/index.php?question6

3/
http://faq.vb.free.fr/index.php?question
Pour démarrer un programme "normal" au démarrage de Windows, menu
démarrer > programmes > démarrage
ou dans le registre:
http://support.microsoft.com/default.aspx?kbid9365


"Pierre Fauconnier" a écrit dans le
message de news:
Bonjour ou bonsoir

J'ai développé un petit logiciel qui doit, chaque jour à minuit,
réaliser une tâche...

Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop


Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer lorsque
je ferme l'application ?

2. Ce processus fait monter l'utilisation de l'UC à 100%. Existe-t-il
un autre moyen qui n'utilise pas tout l'UC? Y-a-t-il danger à
utiliser 100% de l'UC ?

3. Comment puis-je faire pour transformer ce logiciel en "service"
lancé au démarrage de l'ordinateur ?




Avatar
Pierre Fauconnier
Bonjour Zoury,

Merci pour ta réponse...

Le hic, c'est que je n'arrive pas à me connecter à la faq... :-((

Bon week-end.


--
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..." (Le Chat de
Geluck (enfin, je crois...))
(remplacer NOSPAM par pfi pour me répondre. Merci)


---
Zoury wrote:
Salut Pierre! :O)

J'ai développé un petit logiciel qui doit, chaque jour à minuit,
réaliser une tâche...



avant même de lire le reste, as-tu songé au planificateur de tâches?
Cela évite que ton programme boucle à longueur de journée pour
n'effectuer qu'une tâche par jour..




Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop



..Date est un type de donnée... tu voulais écrire Now j'imagine? ;O)




Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer lorsque
je ferme l'application ?



Où se trouve le code? comment fermes-tu l'appli? Quel est le code de
la fonction TransfertFichier()? as-tu libérer tous tes objets?

regarde ce lien, si ce n'est déjà fait :

Pourquoi quand je ferme mon programme, celui-ci est encore présent
dans la liste des tâches ? Comment fermer proprement mon programme ?
http://faq.vb.free.fr/index.php?question




2. Ce processus fait monter l'utilisation de l'UC à 100%.
Existe-t-il un autre moyen qui n'utilise pas tout l'UC? Y-a-t-il
danger à utiliser 100% de l'UC ?



Ajoute un appel de quelques millisecondes à la fonction Sleep() comme
ceci : '***
Option Explicit

Private m_bStop As Boolean
Private Declare Sub Sleep _
Lib "kernel32" _
( _
ByVal dwMilliseconds As Long _
)

Private Sub Form_Click()
m_bStop = True
End Sub

Private Sub Form_Load()
Call Me.Show
Do Until m_bStop
DoEvents
Call Sleep(10)
Loop
Call Unload(Me)
End Sub
'***




3. Comment puis-je faire pour transformer ce logiciel en "service"
lancé au démarrage de l'ordinateur ?



Malheureusement pour toi ça n'est ni recommandé, ni supporté en VB..

INFO: Running Visual Basic Applications as Windows NT Services
http://support.microsoft.com/default.aspx?scid=kb;EN-US;175948

HOWTO: Use NTSVC.OCX from Visual Basic
http://support.microsoft.com/default.aspx?scid=kb;en-us;170883&Product=vbb




C'est pourquoi je te recommandes fortement le planificateur de tâches.

Ton programme se résumerait à ceci :
'***
' Module1
Option Explicit

Private Sub Main()
Call TransfertFichier
End Sub
'***


Avatar
François Picalausa
Hello!

Ici, aucun problème de connexion.
Veux-tu que je t'envoie les articles en question dans ta BAL?

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Pierre Fauconnier" a écrit dans le
message de news:
Bonjour François...

Merci pour tes réponses. Malheureusement, je n'arrive pas à me
connecter à la faq... :-((

Bon week-end.




François Picalausa wrote:
Bonjour/soir,

1/
http://faq.vb.free.fr/index.php?question

2/
Tu peux simplement utiliser un timer qui a chaque événement timer
calculera l'interval restant au timer...
(soit le max, soit quelques millisecondes)
Tu peux aussi ajouter des pauses dans ta boucle:
http://faq.vb.free.fr/index.php?question6

3/
http://faq.vb.free.fr/index.php?question
Pour démarrer un programme "normal" au démarrage de Windows, menu
démarrer > programmes > démarrage
ou dans le registre:
http://support.microsoft.com/default.aspx?kbid9365


"Pierre Fauconnier" a écrit dans le
message de news:
Bonjour ou bonsoir

J'ai développé un petit logiciel qui doit, chaque jour à minuit,
réaliser une tâche...

Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop


Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer lorsque
je ferme l'application ?

2. Ce processus fait monter l'utilisation de l'UC à 100%.
Existe-t-il un autre moyen qui n'utilise pas tout l'UC? Y-a-t-il
danger à utiliser 100% de l'UC ?

3. Comment puis-je faire pour transformer ce logiciel en "service"
lancé au démarrage de l'ordinateur ?






Avatar
Zoury
> En fait, il existe:
Date Data Type
Date Function
Date Statement



eh bien!! Merci Francois!! comme quoi on en apprend tous les jours.. je le
n'avais encore jamais vu dans un autre contexte. :O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Pierre Fauconnier
Ce serait très gentil... Merci beaucoup


--
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..." (Le Chat de
Geluck (enfin, je crois...))
(remplacer NOSPAM par pfi pour me répondre. Merci)


---

François Picalausa wrote:
Hello!

Ici, aucun problème de connexion.
Veux-tu que je t'envoie les articles en question dans ta BAL?


"Pierre Fauconnier" a écrit dans le
message de news:
Bonjour François...

Merci pour tes réponses. Malheureusement, je n'arrive pas à me
connecter à la faq... :-((

Bon week-end.




François Picalausa wrote:
Bonjour/soir,

1/
http://faq.vb.free.fr/index.php?question

2/
Tu peux simplement utiliser un timer qui a chaque événement timer
calculera l'interval restant au timer...
(soit le max, soit quelques millisecondes)
Tu peux aussi ajouter des pauses dans ta boucle:
http://faq.vb.free.fr/index.php?question6

3/
http://faq.vb.free.fr/index.php?question
Pour démarrer un programme "normal" au démarrage de Windows, menu
démarrer > programmes > démarrage
ou dans le registre:
http://support.microsoft.com/default.aspx?kbid9365


"Pierre Fauconnier" a écrit dans le
message de news:
Bonjour ou bonsoir

J'ai développé un petit logiciel qui doit, chaque jour à minuit,
réaliser une tâche...

Dès lors, j'ai quelques questions :
1. J'ai écrit la boucle suivante
DateActive = Date
Do
DoEvents
If Date > DateActive Then
TransfertFichier
DateActive = Date
End If
Loop


Normalement, cela marche, mais lorsque je ferme mon application, le
processus est toujours actif. Comment faire pour le terminer
lorsque je ferme l'application ?

2. Ce processus fait monter l'utilisation de l'UC à 100%.
Existe-t-il un autre moyen qui n'utilise pas tout l'UC? Y-a-t-il
danger à utiliser 100% de l'UC ?

3. Comment puis-je faire pour transformer ce logiciel en "service"
lancé au démarrage de l'ordinateur ?