Comment faire communiquer des threads ? - C++ - Programmation
Marsh Posté le 20-01-2005 à 15:57:10
de la gestion d'evenement ? genre le mot clé 'event' ?
tu veux quoi exactement ?
(sinon : System.Threading + msdn)
Marsh Posté le 20-01-2005 à 16:01:44
system::threading dans la msdn j'y ai déjà passé quelques heures.
Mon pb: J'ai une application réseau avec un thread client distinct du thread principal. Le thread principal a de temps en temps besoin d'nevoyer des données à un serveur. Comment faire pour qu'il dise au thread client qu'il a qqch pour lui et lui filer les données ? Histoire que je le mette en sleep quand y a rien à envoyer et rien à reçevoir de la part du serveur ?
Marsh Posté le 20-01-2005 à 16:03:49
le thread principale balance le boulot dans une file d'attente. Le thread secondaire regarde si y'a du boulot dans la file. Si y'en a il le fait, et le degage de la file, sinon il se met en attente de boulot. tu dois pouvoir jouer avec des mutex pour faire ca
Marsh Posté le 20-01-2005 à 16:07:59
avec la file d'attente comme donnée membre d'une classe qui englobe le thread ? pas bete ça !
Marsh Posté le 20-01-2005 à 16:08:37
ReaderWriterLock is used to synchronize access to a resource. At any given time, it allows either concurrent read access for multiple threads, or write access for a single thread.
Marsh Posté le 20-01-2005 à 17:50:15
J'ai réussi à avoir une donnée membre de ma classe client à laquelle je peux acceder depuis les 2 threads. Pour ça, je crée ma classe client avant de lancer le thread.
Code :
|
Le souci, c'est que ma classe client dérive de TcpClient. Et je peux pas me servir de ses méthodes car threadProc (la fonction appelée au lancement du thread) est static et ne peut appeler que du static.
Code :
|
Donc soit j'ai une variable pour communiquer entre threads, soit j'utilise les méthodes de TcpClient. Comment combiner les 2 ?
J'ai pensé à faire une classe clientHandler qui contiendrait les données à partager et dont hériterait CClient, mais elle hérite déjà de TcpClient et c'est pas possible qu'une classe __gc hérite de plus d'une classe __gc ou d'une classe non __gc. Je suis coincé .
Marsh Posté le 20-01-2005 à 19:24:04
Est-ce qu'il est possible de lancer le thread en indiquant une fonction non static dans ThreadStart ?
Pour le code plus haut, si je déclare ThreadProc en non static, j'ai droit à ce message:
z:\slp12\Reseau\CThread.cpp(26): error C3351: 'System::Threading::ThreadStart' : si vous passez une instance d'objet NULL à un constructeur délégué, vous devez aussi passer l'adresse d'une fonction membre static
Ce qui semble dire que c'est possible, en ne passant pas un pointeur NULL. Mais je dois passer quel pointeur alors ?
Marsh Posté le 20-01-2005 à 19:42:50
Il semblerait qu'en remplaçant
Code :
|
par
Code :
|
ça marche (ça compile quoi), mais j'arrive pas a lancer le programme, j'ai droit à une System.Security.Policy.PolicyException (c'est quoi ce truc ?) sur les ordis de l'école, vais etre obligé de rentrer chez moi pour tester.
Marsh Posté le 20-01-2005 à 15:56:08
Je suis en C++ managé sous .net, et j'aimerais faire communiquer 2 threads entre eux. J'ai trouvé aucune doc pour faire de la gestion d'evenements, zavez pas des infos ?
---------------
©2008 Bleuarff Corp.