Bonjour,
je cherche des infos sur comment partager une CStringList entre 2 thread, un qui la remplirait et l'autre qui la viderai
nb : je cherche pas une solution toute faite mais des tut, cours, exemple ...
jvois pas ou chercher sur le site
merci
Version imprimable
Bonjour,
je cherche des infos sur comment partager une CStringList entre 2 thread, un qui la remplirait et l'autre qui la viderai
nb : je cherche pas une solution toute faite mais des tut, cours, exemple ...
jvois pas ou chercher sur le site
merci
salut,
l'emploi d'un objet CMutex devrait suffire , mutex == mutual exclusion.
pour acceder à la ressource protégée il suffit de faire Lock(),et Unlock() a la fin du traitement.
:D
ok, merci pour l'info
en fait, il faudrait que ce soit non blocant,
jm'explique,
jai un processus qui doit absolument tourner en continu et remplir une stringlist,
un second processus doit tourner en parallele et upper ces infos sur le net, au fur et a mesure qu'il up, les données doivent être supprimée de la liste une fois uppées.
Dans ce cas, tu ne peux pas te permettre que ce soit non bloquant, car en cas d'acces simultané, tu va tout faire planter (ou, dans le meilleur cas, tu aura des effets de bords incontrôlés). Mais ça ne pose pas de problème: quand tu veux faire un RemoveAt() ou un AddTail(), tu les insère dans une boucle while (tant que CMutex.IsLock()) avec un wait.
Ensuite, viens le problème de savoir où tu met ta variable (la CStringList). En effet, souvent l'utilisation de threads necessite des callbacks. Mais ce n'est peut-être pas ton cas.
??Citation:
tu les insère dans une boucle while (tant que CMutex.IsLock()) avec un wait.
c'est quoi ce wait ?
j'avais cru comprendre qu'en faisant :
ca suffisait, l'instruction sLock.Lock(); n'est pas deja blocante ? en attente que le mutex soit libreCode:
 1
2
3
4
5
6
7
8 CSingleLock sLock(&(m_pOwner->m_mutex)); sLock.Lock(); // code sensible sLock.Unlock();
est ce que je me trompe ?
ouioui pardon, j'ai confondu avec la méthode qui consiste à utiliser des WaitFor*Oject(). Désolé.
Donc non, tu ne te trompes pas. :lol:
ok merci
ca a l'air de marcher nickel ! :)