Accueil > Forum > > > > Passer des arguments à un Thread & framework 2.0
Passer des arguments à un Thread & framework 2.0
dimanche 29 octobre 2006 à 02:33:33 |
Passer des arguments à un Thread & framework 2.0

nico971gwada
|
Salut, Je dois faire une interface graphique qui permet de s'échanger des fichiers xml. Sans trop rentrer dans les détails je dois faire 2 serveur UDP écoutant 2 ports différents, 1 client UDPBroadast et 1 serveur TCP multithreadé. Le problème c'est que je suis une quiche en c++. Je n'en suis qu'au début et je m'attaque au deux serveur UDP. J'ai pensé faire un thread mais je ne sais pas comment lui passer des arguments (en l'occurence le numéro du port qu'il doit écouter). De plus au moment où je souhaite récupérer le nombre de bytes reçus en exécutant : <code> count = socket_udp->ReceiveFrom(buffer_reception,_port_distant); </code> Ma fenetre se gèle. En mode débug je ne remarque rien de particulier. Help!!!! Merci d'avance.
|
|
dimanche 29 octobre 2006 à 09:57:57 |
Re : Passer des arguments à un Thread & framework 2.0

juju12
|
Pour le thread, tu utilises la fonction CreateThread : l'argument lpParameter est un pointeur vers une structure contenant les arguments que tu souhaites passer, ou bien directement un pointeur sur une donnée (le numéro du port par exemple).
|
|
dimanche 29 octobre 2006 à 12:59:08 |
Re : Passer des arguments à un Thread & framework 2.0

nico971gwada
|
Merci Juju, ça marche nikel pour le passage d'argument. Par contre g toujours ce problème de fenetre figée. Voici une partie de mon code. Si quelqu'un comprend ce qui se passe...
<code> try { // On construit la socket. socket_udp = gcnew System::Net::Sockets::Socket( System::Net::Sockets::AddressFamily::InterNetwork, System::Net::Sockets::SocketType::Dgram, System::Net::Sockets::ProtocolType::Udp);
adresse_locale = Net::IPAddress::Parse("127.0.0.1"); port_local = gcnew System::Net::IPEndPoint(adresse_locale, port); _port_distant = gcnew System::Net::IPEndPoint(adresse_locale, port); socket_udp->Bind(port_local);
// On alloue le buffer de réception buffer_reception = gcnew array<System::Byte>(10000); while(1) { this->labelVortex->Text="Vortex ouvert"; count = socket_udp->ReceiveFrom(buffer_reception,_port_distant);
port_distant = dynamic_cast<System::Net::IPEndPoint^>(_port_distant);
// Le buffer de réception contient quelque chose du genre: // 20004\nMon message // Dont il faut extraire, de la suite '2' '0' '0' '0' '4' // la valeur entière 20004. mem_stream = gcnew System::IO::MemoryStream(buffer_reception,0,count); parser = gcnew System::IO::StreamReader(mem_stream); // Lit de l'ascii message = parser->ReadLine(); // Lit "20004\n" et vaut "20004" // Là, on ReadLine a lu tout le stream (???) et // mem_stream->get_Position() retourne la valeur 11 // Pour un message 20004\nHello (qui a 11 caractères). // Donc je dois recalculer la position dans mon stream à la main... port_reponse = System::Int32::Parse(message); pos = message->Length + 1; System::Console::WriteLine( "Port reponse = {0}, pos = {1}", System::Convert::ToString(port_reponse), System::Convert::ToString(pos)); message = System::Text::Encoding::ASCII->GetString( buffer_reception,pos, count); System::Console::WriteLine("Recu : "); System::Console::Write(" Message : "); System::Console::WriteLine(message); System::Console::WriteLine(" de : {0}",port_distant->Address); </code>
En rouge la ligne qui gèle tout. Voilà si quelqu'un comprend pourkoi ça marche pas ce serait cool.
|
|
dimanche 29 octobre 2006 à 14:50:00 |
Re : Passer des arguments à un Thread & framework 2.0

nico971gwada
|
J'ai trouvé d'où venait le problème mais je ne sais pas comment le résoudre. Quand mon thread UDPserveur s'exécute, il doit mettre à jour certains controles sur ma windowsform. Donc dans la méthode UDPServeur avec laquelle j'appelle mon thread, j'ai mis un :
if (this->labelVortex->InvokeRequired) { array<Object^>^ toto = {obj}; this->Invoke(gcnew MaMethode(this, &Fenetre_principale::UDPServeur), toto ); } else{...le vrai corps de la fonction...}
Le Invoke a apparement pour effet d'annuler l'intéret du thread puisqu'après ma fenetre se fige au moment d'aborder ma boucle while(true) (voir message précédant). Je ne sais pas comment faire. Mon serveur doit passer des messages à ma windowsForm et doit tourner en boucle alors je suis coincé. Please help!!!
|
|
dimanche 29 octobre 2006 à 22:30:17 |
Re : Passer des arguments à un Thread & framework 2.0

badrbadr
|
juste comme ça, y a pas de BeginInvoke() ?
[:D] @++
|
|
dimanche 29 octobre 2006 à 22:56:32 |
Re : Passer des arguments à un Thread & framework 2.0

nico971gwada
|
Quelle est la différence entre invoke et beginInvoke?
Sinon j'ai trouvé un moyen peu élégant (mais bon ça fonctionne) de résoudre mon problème. En fait j'ai crée des fonctions spécifiques pour chaque control de ma windowsForm que je veux modifier et j'apelle ces fonctions quand j'en ai besoin. Je m'explique:
monThread : void monThread(Object^ obj){ .................... while(true){ array<Object^>^ toto = {this->labelVortex,"Vortex ouvert"}; this->Invoke(upControl, toto); ........................ } } upControl: void UpdateControl(Control^ cont, String^ s){ cont->Text = s; } Je sais c'est un peu moche mais j'ai pas trouvé mieux pour l'instant. Si quelqu'un a une idée...
|
|
lundi 30 octobre 2006 à 01:06:44 |
Re : Passer des arguments à un Thread & framework 2.0

badrbadr
|
Salut, je ne connais rien en C++/CLI. Mais en .net en général, BeginInvoke invoke ton contrôle d'une manière asynchrome (qui ne bloque pas ton thread). Ca revient en plus élégant à ce que t'as fait, c'est à dire créer un nouveau thread pour chaque invoke. Regarde du côté de MSDN la-dessus. Sur CodeProject, un article en parle [ Lien ]Bonne chance [:D] @++
|
|
lundi 30 octobre 2006 à 02:06:54 |
Re : Passer des arguments à un Thread & framework 2.0

nico971gwada
|
J'ai essayé avec BeginInvoke et j'ai pas eu de meilleurs résultats. Finalament je pense que je vais me contenter de ma solution un peu sale. Merci en tout cas ;)
|
|
Cette discussion est classée dans : serveur, thread, passer, udp, arguments
Répondre à ce message
Sujets en rapport avec ce message
Thread et serveur UDP [ par nico971gwada ]
Salut,J'ai fait une IHM qui doit démarrer un serveur UDP à partir de l'appuie sur un bouton. Puis en réapuyant sur ce même bouton je voudrais arreter
Problème d'arret de thread (MFC) [ par swinteur ]
Me revoila! lolBon alors j'explique mon probleme.Lorsque mon serveur se lance, il crée un Thread qui gere la connexion.A la fin de l'execution de la t
perte de paquets UDP dans un thread quand l'autre thread fait un write() [ par fabricius ]
Hello,Voila mon problème, ca fait bien une semaine que je suis dessus...J'ai écrit un soft qui écoute une socket UDP, qui reçoit des paquets et qui le
Passer des arguments via les événements [ par billou_13 ]
Voila, j'aimerais avoir votre avis sur la question : quel est pour vous le meilleur moyen de passer des arguments via une événement.Je m'explique. Un
Client UDP avec CAsyncsocket [ par underdog08 ]
Bonjour,Je doit réaliser une communication client serveur UDP en mfc avec CAsyncsocket, je suis débutant en programmation et j'ai difficilement réussi
Thread & Socket [ par katerson ]
Bonjour tout le monde! Je travaille actuellement sur un projet serveur/client sur UDP. Mon serveur comporte 3 threads qui doivent scruter (indépenda
Meilleur solution pour serveur MMORPG. [ par LA_Tupac ]
Bonjour à tous! voila ma question: Je développe actuellement mon premier jeu en réseau. Le socket d'envoi du client est en tcp et le socket d'envoi du
Passage de paramètres [ par deck_bsd ]
Bonjour/bonsoir a tous,Voila , dans la fonction créate thread il y a un paramètre de type LPVOID qui permet de passer des paramètres au thread. Bon po
Question sur Thread dans mon serveur multithread [ par Nixeus ]
Bonjour a tous !J'ai récupérer un code source d' un serveur multithread multi client, en mode console.J'ai repris les classes et j'ai porté ce program
Client/Serveur UDP sur 1 unique machine ! [ par sena ]
Bonjour,j'ai fais deux programmes :un client et un serveur UDP.Ceux ci fonctionnent bien quand je les fait communiquer sur 2 machines différentes.Ce q
Livres en rapport
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|