Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème de thread et de synchronisation

2 réponses
Avatar
Vincent Poyo
Bonjour j'ai un problème de synchronisation avec les threads quand j'utilise
un composant COM (qui m'est imposé).

en fait, un bug de ce composant, m'oblige a utiliser une méthode uniquement
dans le thread qui a créer l'objet. le problème c'est que je dois
implémenter des schedulers, qui dont sont des threads (boucle infinie), et
qui doivent appeler cette méthode.

J'avais trouver une astuce en faisait un Form.invoke avec un délégate. Sauf
que j'éssaye de transformer cette application en service windows, donc plus
de Form, et je ne vois pas comment faire.

Si quelqu'un peut m'apporter une piste de recherche ce sera très sympa,
merci

2 réponses

Avatar
VANNESTE Xavier
avec UCOMITypeInfo.Invoke tu peux t'en sortir elle se trouve dans
System.Runtime.InteropServices elle est un peu complexe mais c la seule
possibilité
"Vincent Poyo" a écrit dans le message de news:
%23ojwq$

Bonjour j'ai un problème de synchronisation avec les threads quand
j'utilise
un composant COM (qui m'est imposé).

en fait, un bug de ce composant, m'oblige a utiliser une méthode
uniquement
dans le thread qui a créer l'objet. le problème c'est que je dois
implémenter des schedulers, qui dont sont des threads (boucle infinie), et
qui doivent appeler cette méthode.

J'avais trouver une astuce en faisait un Form.invoke avec un délégate.
Sauf
que j'éssaye de transformer cette application en service windows, donc
plus
de Form, et je ne vois pas comment faire.

Si quelqu'un peut m'apporter une piste de recherche ce sera très sympa,
merci




Avatar
Vincent Poyo
Merci de ton aide, mais finalement j'ai réussi à résoudre mon pb autrement
Comme d'habitude il suffit de connaitre les bonnes API, et les bons objets
!!!!

Pour information si ca intéresse qlq1,

j'utilise l'objet AutoResetEvent (ARE) de la bibliothèque System.Threading
en fait une fois l'initialisation de faite je fais une boucle while(true)
dans laquelle j'appelle la méthode ARE.WaitOne de cet objet, donc qui attend
qu'un évènement arrive. Il suffit de faire un appel dans une autre méthode
ou thread à ARE.set() pour déclencher cet évènement.
Je vous conseil de voir la doc de MSDN qui est très simple et explicite.

J'ai rencontrer un autre mini pb, avec cette solution qui est que j'envoie
une requête et que la réponse arrive de manière asynchrone via un évènement
et dans le même thread. Donc faut faire un Application.DoEvents() et
utiliser une surcharge de la méthode WaitOne

voici mon bout de code en exmp

Public Sub MyThread()

Init()

While(true)
application.DoEvents()
If (ARE.WaitOne(1,true)) Then ' Evite le WaitOne() bloquant
SendRequest()
End If
End While
End Sub

"VANNESTE Xavier" a écrit dans le message de
news:eh%
avec UCOMITypeInfo.Invoke tu peux t'en sortir elle se trouve dans
System.Runtime.InteropServices elle est un peu complexe mais c la seule
possibilité
"Vincent Poyo" a écrit dans le message de news:
%23ojwq$
>
> Bonjour j'ai un problème de synchronisation avec les threads quand
> j'utilise
> un composant COM (qui m'est imposé).
>
> en fait, un bug de ce composant, m'oblige a utiliser une méthode
> uniquement
> dans le thread qui a créer l'objet. le problème c'est que je dois
> implémenter des schedulers, qui dont sont des threads (boucle infinie),


et
> qui doivent appeler cette méthode.
>
> J'avais trouver une astuce en faisait un Form.invoke avec un délégate.
> Sauf
> que j'éssaye de transformer cette application en service windows, donc
> plus
> de Form, et je ne vois pas comment faire.
>
> Si quelqu'un peut m'apporter une piste de recherche ce sera très sympa,
> merci
>
>