OVH Cloud OVH Cloud

Suspendre toutes les threads lancées à partir d'une autre classe

10 réponses
Avatar
Bull
Bonsoir,

Je voudrais pouvoir faire en sorte qu'avant de fermer mon application,
toutes les threads, dont l'exécution est en cours et qui ont été lancées à
partir d'une autre classe, soient suspendues. Le problème est que je ne peux
plus y accéder pour pouvoir faire le thread.suspend().

Comment faut-il du coup procéder ?

Merci d'avance,

--
Cordialement,
Bull

10 réponses

Avatar
Illinger Philippe
"Bull" wrote in message news:
Bonsoir,

Je voudrais pouvoir faire en sorte qu'avant de fermer mon application,
toutes les threads, dont l'exécution est en cours et qui ont été lancées à
partir d'une autre classe, soient suspendues. Le problème est que je ne peux
plus y accéder pour pouvoir faire le thread.suspend().

Comment faut-il du coup procéder ?




Modifier la classe qui instancie, afin de garder le controle sur les thread fils.

Merci d'avance,

--
Cordialement,
Bull





Avatar
Bull
Bonsoir Philippe,

J'ai fait comme tu m'as conseillé. J'ai donc créer une hashtable qui
contient mes threads en cours d'exécution. A la fermeture de mon appli, je
fais donc pour chaque thread un suspend()

Pourtant, malgré cela, après au moment de zipper ma base access, j'ai une
erreur comme quoi elle est en cours d'utilisation.

Donc, je me demande s'il est possible :
- de lister dans visual studio tous les processus / threads qui sont en
cours d'exécution
- de couper toutes les connections en cours à ma base access

Merci d'avance,

--
Cordialement,
Bull


"Illinger Philippe" a écrit dans
le message de news:

"Bull" wrote in message
news:
Bonsoir,

Je voudrais pouvoir faire en sorte qu'avant de fermer mon application,
toutes les threads, dont l'exécution est en cours et qui ont été lancées à
partir d'une autre classe, soient suspendues. Le problème est que je ne
peux
plus y accéder pour pouvoir faire le thread.suspend().

Comment faut-il du coup procéder ?




Modifier la classe qui instancie, afin de garder le controle sur les thread
fils.

Merci d'avance,

--
Cordialement,
Bull





Avatar
Illinger Philippe
"Bull" wrote in message news:
Bonsoir Philippe,



Bonjour

J'ai fait comme tu m'as conseillé. J'ai donc créer une hashtable qui
contient mes threads en cours d'exécution. A la fermeture de mon appli, je
fais donc pour chaque thread un suspend()

Pourtant, malgré cela, après au moment de zipper ma base access, j'ai une
erreur comme quoi elle est en cours d'utilisation.



C'est le probleme est ailleur, comme la verite d'ailleur...
...c'est pas un suspend qu'il faut faire...mais plutot un ...release ou close...je suis plus partisan d'une fermeture en douceur par le thread lui meme, via un event par exemple...set par ton appli, avec une synchro d'attente de fin...

...en gros que chacun de tes thread fils puisse s'arreter a tout moment sur demande de ton appli...avec fermeture propre et tout et tout...

Apres...ton objet d'acces a access...est-il bien liberé ? (je parle pas de connexion)

Best Regards


Donc, je me demande s'il est possible :
- de lister dans visual studio tous les processus / threads qui sont en
cours d'exécution
- de couper toutes les connections en cours à ma base access

Merci d'avance,

--
Cordialement,
Bull


"Illinger Philippe" a écrit dans
le message de news:

"Bull" wrote in message
news:
> Bonsoir,
>
> Je voudrais pouvoir faire en sorte qu'avant de fermer mon application,
> toutes les threads, dont l'exécution est en cours et qui ont été lancées à
> partir d'une autre classe, soient suspendues. Le problème est que je ne
> peux
> plus y accéder pour pouvoir faire le thread.suspend().
>
> Comment faut-il du coup procéder ?
>

Modifier la classe qui instancie, afin de garder le controle sur les thread
fils.

> Merci d'avance,
>
> --
> Cordialement,
> Bull
>
>
>




Avatar
Bull
Bonjour,

Merci pour votre réponse.

TOut d'abord, je ne trouve pas les méthodes release ou close pour les
threads.

Par ailleurs, c'est bien les threads pour lesquelles j'ai fait un suspend()
qui tourne encore puisque c'est la classe qui est utilisée qui crée
l'exception.

Maintenant, j'aimerais bien "...en gros que chacun de tes thread fils puisse
s'arreter a tout moment sur demande de ton appli...avec fermeture propre et
tout et tout..." mais je ne sais pas du tout comment faire.

Pour info, je lance mes threads de la façon suivante :
Dim myThread As New System.Threading.Thread(AddressOf myClass.myMethod)
myThread.start()

Comment puisque faire donc pour que sur demande de l'appli, les threads
lancées soient stoppées proprement ? Aurais-tu un ex de code stp ?

Merci d'avance,

--
Cordialement,
Bull


"Illinger Philippe" a écrit dans
le message de news: %

"Bull" wrote in message
news:
Bonsoir Philippe,



Bonjour

J'ai fait comme tu m'as conseillé. J'ai donc créer une hashtable qui
contient mes threads en cours d'exécution. A la fermeture de mon appli, je
fais donc pour chaque thread un suspend()

Pourtant, malgré cela, après au moment de zipper ma base access, j'ai une
erreur comme quoi elle est en cours d'utilisation.



C'est le probleme est ailleur, comme la verite d'ailleur...
...c'est pas un suspend qu'il faut faire...mais plutot un ...release ou
close...je suis plus partisan d'une fermeture en douceur par le thread lui
meme, via un event par exemple...set par ton appli, avec une synchro
d'attente de fin...

...en gros que chacun de tes thread fils puisse s'arreter a tout moment sur
demande de ton appli...avec fermeture propre et tout et tout...

Apres...ton objet d'acces a access...est-il bien liberé ? (je parle pas de
connexion)

Best Regards


Donc, je me demande s'il est possible :
- de lister dans visual studio tous les processus / threads qui sont en
cours d'exécution
- de couper toutes les connections en cours à ma base access

Merci d'avance,

--
Cordialement,
Bull


"Illinger Philippe" a écrit dans
le message de news:

"Bull" wrote in message
news:
> Bonsoir,
>
> Je voudrais pouvoir faire en sorte qu'avant de fermer mon application,
> toutes les threads, dont l'exécution est en cours et qui ont été lancées
> à
> partir d'une autre classe, soient suspendues. Le problème est que je ne
> peux
> plus y accéder pour pouvoir faire le thread.suspend().
>
> Comment faut-il du coup procéder ?
>

Modifier la classe qui instancie, afin de garder le controle sur les
thread
fils.

> Merci d'avance,
>
> --
> Cordialement,
> Bull
>
>
>




Avatar
Fred
Dans son message
Bull nous dit :

Bonjour,

Merci pour votre réponse.

TOut d'abord, je ne trouve pas les méthodes release ou close pour les
threads.

Par ailleurs, c'est bien les threads pour lesquelles j'ai fait un
suspend() qui tourne encore puisque c'est la classe qui est utilisée
qui crée l'exception.

Maintenant, j'aimerais bien "...en gros que chacun de tes thread fils
puisse s'arreter a tout moment sur demande de ton appli...avec
fermeture propre et tout et tout..." mais je ne sais pas du tout
comment faire.
Pour info, je lance mes threads de la façon suivante :
Dim myThread As New System.Threading.Thread(AddressOf
myClass.myMethod) myThread.start()

Comment puisque faire donc pour que sur demande de l'appli, les
threads lancées soient stoppées proprement ? Aurais-tu un ex de code
stp ?
Merci d'avance,


"Bull" wrote in message
news:
Bonsoir Philippe,



Bonjour

J'ai fait comme tu m'as conseillé. J'ai donc créer une hashtable qui
contient mes threads en cours d'exécution. A la fermeture de mon
appli, je fais donc pour chaque thread un suspend()

Pourtant, malgré cela, après au moment de zipper ma base access,
j'ai une erreur comme quoi elle est en cours d'utilisation.



C'est le probleme est ailleur, comme la verite d'ailleur...
...c'est pas un suspend qu'il faut faire...mais plutot un ...release
ou close...je suis plus partisan d'une fermeture en douceur par le
thread lui meme, via un event par exemple...set par ton appli, avec
une synchro d'attente de fin...

...en gros que chacun de tes thread fils puisse s'arreter a tout
moment sur demande de ton appli...avec fermeture propre et tout et
tout...
Apres...ton objet d'acces a access...est-il bien liberé ? (je parle
pas de connexion)

Best Regards


Donc, je me demande s'il est possible :
- de lister dans visual studio tous les processus / threads qui sont
en cours d'exécution
- de couper toutes les connections en cours à ma base access

Merci d'avance,

--
Cordialement,
Bull


"Illinger Philippe" a
écrit dans le message de news:
"Bull"
wrote in message
news:
Bonsoir,

Je voudrais pouvoir faire en sorte qu'avant de fermer mon
application, toutes les threads, dont l'exécution est en cours et
qui ont été lancées à
partir d'une autre classe, soient suspendues. Le problème est que
je ne peux
plus y accéder pour pouvoir faire le thread.suspend().

Comment faut-il du coup procéder ?




Modifier la classe qui instancie, afin de garder le controle sur les
thread
fils.

Merci d'avance,

--
Cordialement,
Bull







Bonsoir,
Pour arrêter un thread tu peux utiliser abort, cela déclenche une exception
dans le thread que tu peux récupérer avec un try catch pour terminer
proprement.
Sinon, je partage l'avis de Philippe, avertir le thread qu'il doit se
terminer. Le laisser faire et l'attendre avec un join.

--
Fred
Avatar
Illinger Philippe
"Bull" wrote in message news:
Bonjour,

Merci pour votre réponse.

TOut d'abord, je ne trouve pas les méthodes release ou close pour les
threads.

Par ailleurs, c'est bien les threads pour lesquelles j'ai fait un suspend()
qui tourne encore puisque c'est la classe qui est utilisée qui crée
l'exception.

Maintenant, j'aimerais bien "...en gros que chacun de tes thread fils puisse
s'arreter a tout moment sur demande de ton appli...avec fermeture propre et
tout et tout..." mais je ne sais pas du tout comment faire.

Pour info, je lance mes threads de la façon suivante :
Dim myThread As New System.Threading.Thread(AddressOf myClass.myMethod)
myThread.start()

Comment puisque faire donc pour que sur demande de l'appli, les threads
lancées soient stoppées proprement ? Aurais-tu un ex de code stp ?




Je ne suis pas un defenseur des exceptions, mais la solution de fred doit marcher.
Je suis plus pour des solutions algorithmiques simples...du style creation d'un event Stop dans ton appli, passation de cet event a tes threads, qui doivent dans ce cas avoir un while (wait event) mais sans resetevent



Merci d'avance,

--
Cordialement,
Bull


"Illinger Philippe" a écrit dans
le message de news: %

"Bull" wrote in message
news:
> Bonsoir Philippe,

Bonjour
>
> J'ai fait comme tu m'as conseillé. J'ai donc créer une hashtable qui
> contient mes threads en cours d'exécution. A la fermeture de mon appli, je
> fais donc pour chaque thread un suspend()
>
> Pourtant, malgré cela, après au moment de zipper ma base access, j'ai une
> erreur comme quoi elle est en cours d'utilisation.

C'est le probleme est ailleur, comme la verite d'ailleur...
...c'est pas un suspend qu'il faut faire...mais plutot un ...release ou
close...je suis plus partisan d'une fermeture en douceur par le thread lui
meme, via un event par exemple...set par ton appli, avec une synchro
d'attente de fin...

...en gros que chacun de tes thread fils puisse s'arreter a tout moment sur
demande de ton appli...avec fermeture propre et tout et tout...

Apres...ton objet d'acces a access...est-il bien liberé ? (je parle pas de
connexion)

Best Regards

>
> Donc, je me demande s'il est possible :
> - de lister dans visual studio tous les processus / threads qui sont en
> cours d'exécution
> - de couper toutes les connections en cours à ma base access
>
> Merci d'avance,
>
> --
> Cordialement,
> Bull
>
>
> "Illinger Philippe" a écrit dans
> le message de news:
>
> "Bull" wrote in message
> news:
> > Bonsoir,
> >
> > Je voudrais pouvoir faire en sorte qu'avant de fermer mon application,
> > toutes les threads, dont l'exécution est en cours et qui ont été lancées
> > à
> > partir d'une autre classe, soient suspendues. Le problème est que je ne
> > peux
> > plus y accéder pour pouvoir faire le thread.suspend().
> >
> > Comment faut-il du coup procéder ?
> >
>
> Modifier la classe qui instancie, afin de garder le controle sur les
> thread
> fils.
>
> > Merci d'avance,
> >
> > --
> > Cordialement,
> > Bull
> >
> >
> >
>
>




Avatar
Bull
Bonjour Fred,

Merci pour ta réponse. J'ai donc fait un Abort suivi d'un join et ça a l'air
de bien fonctionné. Même pas eu besoin de récupérer l'exception :)

Merci

--
Cordialement,
Bull


"Fred" a écrit dans le message de news:

Dans son message
Bull nous dit :

Bonjour,

Merci pour votre réponse.

TOut d'abord, je ne trouve pas les méthodes release ou close pour les
threads.

Par ailleurs, c'est bien les threads pour lesquelles j'ai fait un
suspend() qui tourne encore puisque c'est la classe qui est utilisée
qui crée l'exception.

Maintenant, j'aimerais bien "...en gros que chacun de tes thread fils
puisse s'arreter a tout moment sur demande de ton appli...avec
fermeture propre et tout et tout..." mais je ne sais pas du tout
comment faire.
Pour info, je lance mes threads de la façon suivante :
Dim myThread As New System.Threading.Thread(AddressOf
myClass.myMethod) myThread.start()

Comment puisque faire donc pour que sur demande de l'appli, les
threads lancées soient stoppées proprement ? Aurais-tu un ex de code
stp ?
Merci d'avance,


"Bull" wrote in message
news:
Bonsoir Philippe,



Bonjour

J'ai fait comme tu m'as conseillé. J'ai donc créer une hashtable qui
contient mes threads en cours d'exécution. A la fermeture de mon
appli, je fais donc pour chaque thread un suspend()

Pourtant, malgré cela, après au moment de zipper ma base access,
j'ai une erreur comme quoi elle est en cours d'utilisation.



C'est le probleme est ailleur, comme la verite d'ailleur...
...c'est pas un suspend qu'il faut faire...mais plutot un ...release
ou close...je suis plus partisan d'une fermeture en douceur par le
thread lui meme, via un event par exemple...set par ton appli, avec
une synchro d'attente de fin...

...en gros que chacun de tes thread fils puisse s'arreter a tout
moment sur demande de ton appli...avec fermeture propre et tout et
tout...
Apres...ton objet d'acces a access...est-il bien liberé ? (je parle
pas de connexion)

Best Regards


Donc, je me demande s'il est possible :
- de lister dans visual studio tous les processus / threads qui sont
en cours d'exécution
- de couper toutes les connections en cours à ma base access

Merci d'avance,

--
Cordialement,
Bull


"Illinger Philippe" a
écrit dans le message de news:
"Bull"
wrote in message
news:
Bonsoir,

Je voudrais pouvoir faire en sorte qu'avant de fermer mon
application, toutes les threads, dont l'exécution est en cours et
qui ont été lancées à
partir d'une autre classe, soient suspendues. Le problème est que
je ne peux
plus y accéder pour pouvoir faire le thread.suspend().

Comment faut-il du coup procéder ?




Modifier la classe qui instancie, afin de garder le controle sur les
thread
fils.

Merci d'avance,

--
Cordialement,
Bull







Bonsoir,
Pour arrêter un thread tu peux utiliser abort, cela déclenche une
exception dans le thread que tu peux récupérer avec un try catch pour
terminer proprement.
Sinon, je partage l'avis de Philippe, avertir le thread qu'il doit se
terminer. Le laisser faire et l'attendre avec un join.

--
Fred





Avatar
Fred
Dans son message
Bull nous dit :

Bonjour Fred,



Bonjour,


Merci pour ta réponse. J'ai donc fait un Abort suivi d'un join et ça
a l'air de bien fonctionné. Même pas eu besoin de récupérer
l'exception :)



Je te conseille tout de même de traiter l'exception. C'est ce qui te permet
de fermer proprement toutes les ressources ouvertes.
Le join n'est pas forcément utile dans ce cas. Je le citais comme moyen
d'appliquer ce que propose Philippe qui me paraît plus robuste. Par un moyen
ou un autre tu préviens le thread qu'il doit se terminer. Je suppose que tu
as une boucle dans ton thread. Ainsi tu le laisse finir ce qu'il est en
train de faire et se terminer convenablement. Un event est intéressant.


Merci





--
Fred
Avatar
Bull
Bonjour,

Je n'arrive pas à traiter l'exception, peut être est-ce dû à mon thread. En
fait, il n'y a pas de boucle comme tu le supposais, l'address of de mon
thread pointe vers une Sub d'une classe. Cette sub utilise un sémaphore
avant de traiter une autre Sub dans la même classe.

--
Cordialement,
Bull


"Fred" a écrit dans le message de news:
%
Dans son message
Bull nous dit :

Bonjour Fred,



Bonjour,


Merci pour ta réponse. J'ai donc fait un Abort suivi d'un join et ça
a l'air de bien fonctionné. Même pas eu besoin de récupérer
l'exception :)



Je te conseille tout de même de traiter l'exception. C'est ce qui te
permet de fermer proprement toutes les ressources ouvertes.
Le join n'est pas forcément utile dans ce cas. Je le citais comme moyen
d'appliquer ce que propose Philippe qui me paraît plus robuste. Par un
moyen ou un autre tu préviens le thread qu'il doit se terminer. Je suppose
que tu as une boucle dans ton thread. Ainsi tu le laisse finir ce qu'il
est en train de faire et se terminer convenablement. Un event est
intéressant.


Merci





--
Fred





Avatar
Illinger Philippe
"Bull" wrote in message news:
Bonjour,


Re,



Je n'arrive pas à traiter l'exception, peut être est-ce dû à mon thread. En
fait, il n'y a pas de boucle comme tu le supposais, l'address of de mon
thread pointe vers une Sub d'une classe. Cette sub utilise un sémaphore
avant de traiter une autre Sub dans la même classe.




donc tes N threads appelent des fonctions bloquantes ?
hum... comment tu fait pour sortir des fonction blocantes pour terminer proprement ?
Cela me laisse penser au socket client-serveur blocante...dont le serveur reste bloqué tant qu'il n'y pas de client..et comme il n'y en a jamais...il prend perpete.( si mauvaise IP), c'est pas <bien> de condamner un serveur pour perpete alors qu'il a rien demander...
Quand on utilise une fonction blocante...TOUJOURS verifier les conditions de deblocage...et l'exploiter.

Acces ...j'evite...la gestion multi utilisateur et trop mauvaise...ai une nette preference pour SQLServer, mais c'est un autre debat (meme si MSDE est gratuit...)


Best Regards



--
Cordialement,
Bull


"Fred" a écrit dans le message de news:
%
> Dans son message
> Bull nous dit :
>
>> Bonjour Fred,
>
> Bonjour,
>
>>
>> Merci pour ta réponse. J'ai donc fait un Abort suivi d'un join et ça
>> a l'air de bien fonctionné. Même pas eu besoin de récupérer
>> l'exception :)
>
> Je te conseille tout de même de traiter l'exception. C'est ce qui te
> permet de fermer proprement toutes les ressources ouvertes.
> Le join n'est pas forcément utile dans ce cas. Je le citais comme moyen
> d'appliquer ce que propose Philippe qui me paraît plus robuste. Par un
> moyen ou un autre tu préviens le thread qu'il doit se terminer. Je suppose
> que tu as une boucle dans ton thread. Ainsi tu le laisse finir ce qu'il
> est en train de faire et se terminer convenablement. Un event est
> intéressant.
>
>>
>> Merci
>
>
>
> --
> Fred
>
>
>