begin process at 2012 05 29 14:51:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Passage d'argument a un thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Passage d'argument a un thread

mercredi 22 février 2006 à 11:39:29 | Passage d'argument a un thread

alex124

Bonjour, j'ai un probleme lorsque je veux passer une chaine de caractere en argument a un thread, voici mon code :

DWORD WINAPI thcmd(LPVOID lpParam)
{
    printf("\nlpParam = %s\n", (char*)lpParam);
   
    return 0;
}

void CommandParser(char * buf)
{
    DWORD ThreadId;

    if(GetParameter(buf,3))
    {
        if (!strcmp(GetParameter(buf,3), "$cmd"))
        {
            if(GetParameter2(buf,2))
            {
                printf("\ncmd = %s\n", GetParameter2(buf,2));

                CreateThread(NULL,NULL,thcmd,(LPVOID)GetParameter2(buf,2),NULL,&ThreadId);
            }
        }
    }
}

Voici les prototypes des fonctions utilisées:
char *GetParameter(char *buf,int nr);
char *GetParameter2(char *buf,int nr);

La fonction CommandParser recupere l'argument écris apres $cmd et dois le transmettre au thread.
Exemple:
Si dans buf il y a:
$cmd "ceci est une commande de test"

Le resultat de GetParameter(buf,3) est: $cmd
Le resultat de GetParameter2(buf,2) est: ceci est une commande de test

Or lorsque j execute mon code, dans mon GetParameter2(buf,2) j'ai bien: ceci est une commande de test, mais dans mon lpParam j'ai autre chose (le printf m'indique que la valeur est: md)
Par contre lorsque je passe un entier a la place d'une chaine ça marche

Comment faire pour que cela marche avec les chaines ?

Merci d'avance
mercredi 22 février 2006 à 11:45:03 | Re : Passage d'argument a un thread

alex124

Je voudrais rajouter que si je fait:

char * test = "c un test";
CreateThread(NULL,NULL,thcmd,(LPVOID)test,NULL,&ThreadId);

ma chaine est bien passée au lpParam

C'est a ne plus rien y comprendre :S lol
mercredi 22 février 2006 à 12:19:53 | Re : Passage d'argument a un thread

olbal

Membre Club
Par exemple si buf pointe sur une variable locale de la fonction appelant CommandParser, la variable locale à de grande chance d'être détruite quand le thread va vouloir la lire... Si buf pointe sur une variable static, pas de problème si la variable n'est pas modifiée pendant que le thread l'utilise.
mercredi 22 février 2006 à 12:20:39 | Re : Passage d'argument a un thread

BruNews

Administrateur CodeS-SourceS
Faut voir d'où vient ce *buf, ne serait pas un buffer local à une fonction qui deviendrait illico invalide après sortie de cette fonction ?
A croire puisque fonctionne avec une constante.

ciao...
[ Lien ]
BruNews, MVP VC++
mercredi 22 février 2006 à 13:07:50 | Re : Passage d'argument a un thread

alex124

En fait mon prog se connecte a IRC et reçoit le texte dans buffer.
Voici le code apres la connexion au serveur:

while (1)
{
memset(buffer, '\0', 255); //on vide le buffer
recv(sock, buffer, sizeof(buffer), 0);

// on efface le \l\n
buffer[strlen(buffer)-2] = '\0';
                
                // on affiche le texte
printf("%s\n",buffer);

                // on execute les commandes
CommandParser(buffer);
}

buffer est une variable globale: char buffer[255];
mercredi 22 février 2006 à 14:05:01 | Re : Passage d'argument a un thread

alex124

Apparament j ai reussi a corriger le probleme, j'ai appeler le code pour recevoir le buffer directement dans la fonction commandparser et sa transmet la bonne chaine de caractere. Ca devait etre un probleme de variables globales/locales, merci a vous deux.


Cette discussion est classée dans : thread, char, argument, buf, getparameter2


Répondre à ce message

Sujets en rapport avec ce message

Problème d'effacement de tableau en C++ (sans MFC) [ par Shad0w ] Voilà, mon code copie le contenu d'un fichier dans une edit :------------- char fil[LEN]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFI Problème avec char* [ par Wiwi ] Bonjour tt le monde, j'ai une tite pro (bidon) avec ce morceau de programme. Lors de sa compilation il n'y a aucune erreur, par contre lors de son exé les Argument Du main() !!! [ par WaFFel ] bha expliquon mon problem !int main(int nArg,char* cArgs[]){ // ..... plein de ligne de code ...... }bha vous voyer ses une declaration d'un main d [ c++ ] pb de convertion hexa [ par devoX ] Bonjour a tous,j'ai un petit soucis, je vous explique:je dispose d'un text dans un buffer buf et je desire le metre dans un autre buffer buf2 mais en URGENT: pb passage d'argument tableau de chaine de caracteres! [ par joduak ] Salut à vous! j'ai un problème de passage d'argument d'un tableau de chaine de caractere. Si quelqu'un à une idée, faire vite svp ! Voici mon code : probleme affectation structure [ par cimcim ] Bonjour à tous... Je suis en train d'écrire un décodeur de table sdt (api dvb), mais j'ai un souci lors de l'affectation de ma structure... En gros, m eviter les debordement memoire en c [ par flofloo ] bonjour tout le monde j'ai un probleme avec la gestion des pointeurs voila je m'explique de suite...j'ai une fonction "ExtractString" dont voici l'ent Liberation de la mémoire [ par Xentor609 ] Salut,Voici le code qui me pose un pitit probleme:char* fonction(){char* buf=new char[MAX_BUF];//traitement du bufreturn buf;}void MyFunc()< thread et parametre char [ par Anacr0x ] Salut,juste une petite question, ya-t-il un moyen simple de mettre une variable caractere en parametre d'un thread ?J'arrive a la faire avec un int ou comment convertir un long en unsigned char ? [ par igorpastis ] voila mon probleme : je doit récupere dans un fichier texte des données. j'ai donc réalisé une fonction que j'apelle à chaque fois que j'en ais besoin


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,663 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales