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
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
Thread et socket udp [ par eurysthe ]
Bonjour !!Voila j'ai un petit problème de thread qui me pourrit la vie.J'ai crée un thread qui doit écouter en boucle les informations qui transite su
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|