Utilisation des threads en VB.NET 2005

Le
Goo
Bonjour à tous,

J'aimerais utiliser les threads pour écrire mon code:
du genre
Protected Sub CheckAndStartPolling()
Dim thr As New Thread(New ThreadStart(AddressOf Poll)
thr.Start()
thr.IsBackground = True
End Sub

Et ma mehode est du genre:
Sub Poll()
Do
Thread.Sleep(2 * 1000) //Le thread principal attend 2 sec
For r As Integer = 0 To 6
Dim del As New HandleDelegate(method)
del.BeginInvoke(msg(r), Nothing, Nohing)
Next
Loop While True
End Sub

La methode Poll boucle 23 fois puis s'arrête et de cela plus rien.
J'ai l'impression que mon thread est suspendu ou arrêté. Alors que
j'aimerais qu'il continue de tourner comme dans le cas d'un timer.

Quelqu'un pourrait me dire pourquoi cet arrêt?

Merci beaucoup de votre réponse.

GOO
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred
Le #12220861
Dans : news:%,
Goo disait :
Bonjour à tous,



Bonjour,

Sub Poll()
Do
Thread.Sleep(2 * 1000) //Le thread principal attend 2 sec
For r As Integer = 0 To 6
Dim del As New HandleDelegate(method)
del.BeginInvoke(msg(r), Nothing, Nohing)
Next
Loop While True
End Sub

La methode Poll boucle 23 fois puis s'arrête et de cela plus rien.
J'ai l'impression que mon thread est suspendu ou arrêté. Alors que
j'aimerais qu'il continue de tourner comme dans le cas d'un timer.

Quelqu'un pourrait me dire pourquoi cet arrêt?



Une éventuelle erreur dans la boucle ?

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Goo
Le #12220851
Merci Fred,
Je vais exploiter cette piste et je tiendrai informé

GOO

"Fred" eQ%
Dans : news:%,
Goo disait :
Bonjour à tous,



Bonjour,

Sub Poll()
Do
Thread.Sleep(2 * 1000) //Le thread principal attend 2 sec
For r As Integer = 0 To 6
Dim del As New HandleDelegate(method)
del.BeginInvoke(msg(r), Nothing, Nohing)
Next
Loop While True
End Sub

La methode Poll boucle 23 fois puis s'arrête et de cela plus rien.
J'ai l'impression que mon thread est suspendu ou arrêté. Alors que
j'aimerais qu'il continue de tourner comme dans le cas d'un timer.

Quelqu'un pourrait me dire pourquoi cet arrêt?



Une éventuelle erreur dans la boucle ?

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Goo
Le #12220841
Bonjour Fred

Apparemment, il n'y a pas d'erreur dans ma boucle. Mon code est celui que
j'ai fourni et la methode appellée method
elle non plus ne me signale aucune erreur.
En principe, j'envoie des requêtes au serveur Exchange car je scanne une
boîte aux lettres en utilisant WEBDAV.
Peut être que l'erreur vient de là mais aucune idée.

Merci beaucoup mais si tu as d'autres idées, je suis partant.

Cordialement
GOO

"Fred" eQ%
Dans : news:%,
Goo disait :
Bonjour à tous,



Bonjour,

Sub Poll()
Do
Thread.Sleep(2 * 1000) //Le thread principal attend 2 sec
For r As Integer = 0 To 6
Dim del As New HandleDelegate(method)
del.BeginInvoke(msg(r), Nothing, Nohing)
Next
Loop While True
End Sub

La methode Poll boucle 23 fois puis s'arrête et de cela plus rien.
J'ai l'impression que mon thread est suspendu ou arrêté. Alors que
j'aimerais qu'il continue de tourner comme dans le cas d'un timer.

Quelqu'un pourrait me dire pourquoi cet arrêt?



Une éventuelle erreur dans la boucle ?

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Fred
Le #12220831
Dans : news:%23$$,
Goo disait :

Apparemment, il n'y a pas d'erreur dans ma boucle. Mon code est celui
que j'ai fourni et la methode appellée method
elle non plus ne me signale aucune erreur.
En principe, j'envoie des requêtes au serveur Exchange car je scanne
une boîte aux lettres en utilisant WEBDAV.
Peut être que l'erreur vient de là mais aucune idée.

Merci beaucoup mais si tu as d'autres idées, je suis partant.



En plaçant un try catch dans la boucle le thread s'arrête au bout de 23
boucles également ?
Je ferais un essai en lançant, non pas un, mais plusieurs threads qui
exécuteraient la méthode en synchrone.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Patrice
Le #12220821
Si les 7 appels ne se terminent pas dans les deux secondes, il serait
peut-être également possible que l'on produise les appels plus vite que l'on
ne peut les triater ce qui finit au bout d'un certain temps par épuiser les
threads disponibles...

Le async result pourrait permettre de vérifier que les appels se déroulent
bien. Dans un rpemier temps je ferais les apples tout de suite, je domriais
deux secondes et je vérifierai que les appels ont bien été fini.

En plus on appel x fois la même méthode. Le contenu de cette méthode peut-il
poser problème ? (je mettrais une méthode vide pour l'instrant).

--
Patrice

"Fred" OE$$
Dans : news:%23$$,
Goo disait :

Apparemment, il n'y a pas d'erreur dans ma boucle. Mon code est celui
que j'ai fourni et la methode appellée method
elle non plus ne me signale aucune erreur.
En principe, j'envoie des requêtes au serveur Exchange car je scanne
une boîte aux lettres en utilisant WEBDAV.
Peut être que l'erreur vient de là mais aucune idée.

Merci beaucoup mais si tu as d'autres idées, je suis partant.



En plaçant un try catch dans la boucle le thread s'arrête au bout de 23
boucles également ?
Je ferais un essai en lançant, non pas un, mais plusieurs threads qui
exécuteraient la méthode en synchrone.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Goo
Le #12220771
Merci Patrice,
Je crois que tu dois avoir raison, car en fournissant une methode vide avec
seulement Console.Writeline("OK"), mon thread ne s'arrête plus.
Je vais essayer de trouver la solution.
Cordialement
GOO

"Patrice"
Si les 7 appels ne se terminent pas dans les deux secondes, il serait
peut-être également possible que l'on produise les appels plus vite que
l'on ne peut les triater ce qui finit au bout d'un certain temps par
épuiser les threads disponibles...

Le async result pourrait permettre de vérifier que les appels se déroulent
bien. Dans un rpemier temps je ferais les apples tout de suite, je
domriais deux secondes et je vérifierai que les appels ont bien été fini.

En plus on appel x fois la même méthode. Le contenu de cette méthode
peut-il poser problème ? (je mettrais une méthode vide pour l'instrant).

--
Patrice

"Fred" OE$$
Dans : news:%23$$,
Goo disait :

Apparemment, il n'y a pas d'erreur dans ma boucle. Mon code est celui
que j'ai fourni et la methode appellée method
elle non plus ne me signale aucune erreur.
En principe, j'envoie des requêtes au serveur Exchange car je scanne
une boîte aux lettres en utilisant WEBDAV.
Peut être que l'erreur vient de là mais aucune idée.

Merci beaucoup mais si tu as d'autres idées, je suis partant.



En plaçant un try catch dans la boucle le thread s'arrête au bout de 23
boucles également ?
Je ferais un essai en lançant, non pas un, mais plusieurs threads qui
exécuteraient la méthode en synchrone.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)






Fred
Le #12220691
Dans : news:,
Patrice disait :
Si les 7 appels ne se terminent pas dans les deux secondes, il serait
peut-être également possible que l'on produise les appels plus vite
que l'on ne peut les triater ce qui finit au bout d'un certain temps
par épuiser les threads disponibles...

Le async result pourrait permettre de vérifier que les appels se
déroulent bien. Dans un rpemier temps je ferais les apples tout de
suite, je domriais deux secondes et je vérifierai que les appels ont
bien été fini.
En plus on appel x fois la même méthode. Le contenu de cette méthode
peut-il poser problème ? (je mettrais une méthode vide pour
l'instrant).



Est-il utile de lancer la procédure en asynchrone ?
Lancer un thread par boîte à relever me paraît intéressant.
On évite la boucle For et si de plus on passe un paramètre au thread, on
n'écrit qu'une seule procédure «Poll»
Et on connaît parfaitement le nombre de threads lancés.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Publicité
Poster une réponse
Anonyme