Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Passer paramètre par CreateThread [ Divers / Débutant(e) ] (steroidstinker)

vendredi 6 juillet 2007 à 11:56:24 | Passer paramètre par CreateThread

steroidstinker

Bonjour,
J'ai un petit problème avec un thread. J'utilise WinApi. En fait j'ai une fonction dans un fichier .cpp qui mène à une autre fonction dans un autre fichier .cpp. J'envoie un string en paramètre pour que la deuxième fonction puisse s'en servir. La deuxième fonction est créée avec un CreateThread.

Le problème c'est que je n'arrive pas à passer le string en paramètre, à cause du thread. Est-ce que quelqu'un pourrait m'aider ?

Merci ^^

vendredi 6 juillet 2007 à 13:38:52 | Re : Passer paramètre par CreateThread

NeuroCypher

HANDLE WINAPI CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  SIZE_T dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId
);

Comme tu a pu le lire si tu as cherche...
Le 4e parametre sert a "donner" un parametre...
Tu peux donc envoyer ton element via cette methode sans oublier les casts

---
NeuroCypher

vendredi 6 juillet 2007 à 14:07:36 | Re : Passer paramètre par CreateThread

steroidstinker

Ben en me servant de WinApi j'avais vu ça.. Et j'ai longuement essayé, mais j'arrivais justement pas à m'en servir..

vendredi 6 juillet 2007 à 16:48:48 | Re : Passer paramètre par CreateThread

aztcaLISS

Est-ce que tu passes l'addresse de la string?
lpParameter s'attend a recevoir une addresse.

azt

vendredi 6 juillet 2007 à 18:02:39 | Re : Passer paramètre par CreateThread

BruNews

Administrateur CodeS-SourceS
str = (char*) VirtualAlloc(....);
strcpy(str, CeQueTuVeuxIci);

et tu passes str à CreateThread(), désallouer en sortie de threadProc.

ciao...
BruNews, MVP VC++

samedi 7 juillet 2007 à 12:27:24 | Re : Passer paramètre par CreateThread

steroidstinker

En fait je crois avoir mal expliqué le problème. Je vais mettre le code pour essayer d'être plus clair :

Dans la fonction main, y'a tout l'affichage du gui, et un thread qui s'occupe de travailler sur les messages :
_______________________________________________________________
int WinMain (HINSTANCE Instance, HINSTANCE InstancePrecedente,
              LPSTR LignesDeCommande, int ModeAffichage)
{
/***blabla***/

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)afficherBoite, 0, 0, 0);
}
________________________________________________________________

Le thread mène donc à la fonction afficherBoite, dans le même main.cpp :
________________________________________________________________
int afficherBoite(string affichierMSG)
{
SetWindowText(Texte[0], afficherMSG.c_str());
}
________________________________________________________________
Il ne fait qu'afficher le message.

Et dans un autre fichier Msg.cpp, y'a une fonction qui travaille sur le message à afficher. Donc, cette fonction envoie le string a afficher boite à chaque fois qu'un nouveau message est prêt.
Et je voudrais savoir comment bien passer la variable string. J'ai essayé plusieurs choses, mais pas reussi. =( Pas reussi non plus à passer la variable en 4eme paramètre.. Quelqu'un peut m'aider svplait ?

Merci

lundi 9 juillet 2007 à 12:20:49 | Re : Passer paramètre par CreateThread

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Bon alors à ce que je comprend on passe les argument sous la forme d'un unique pointeur (Sur une structure quand on veut en passer plusieurs je suppose).

Les string, c'est des objets, et y a certainement plein de code implicite un peu de partout dedans tout ça, donc je vais suivre la suggestion du char *.

Tu commence par allouer un emplacement ou copier le contenu de ta chaîne :

// La chaîne que tu veux passer
string str = "Hello world";

// Allocation de la copie
char * copie;
copie = (char*) VirtualAlloc(str.size());

// Recopie de l'original dans la copie
strcpy(copie, str.c_str());

// Lancement du thread
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)afficherBoite, copie, 0, 0);


// Récupération dans afficherBoite
int afficherBoite(char * affichierMSG)
{
  SetWindowText(Texte[0], affichierMSG);
  VirtualFree(affichierMSG, 0, MEM_RELEASE);
}

C'est très probablement simplifiable, et on peut peut être éviter la copie (Passer directement le c_str()), mais là je n'ai pas pris de risque.
(Code non testé)

lundi 9 juillet 2007 à 12:29:32 | Re : Passer paramètre par CreateThread

rt15

Membre Club Administrateur CodeS-SourceS
erratum,

str.size() ne compte pas le zéro terminal, puisqu'il peut d'ailleurs ne pas y en avoir.

Donc c'est

VirtualAlloc(str.size() + 1);

FAQ sur les string : Ils précisent que ce qui est renvoyé par c_str() n'est pas forcément une copie, donc il est à mon avis préférable d'en faire une comme je l'ai fait.





Cette discussion est classé dans : problème, fonction, passer, paramètre, createthread


Répondre à ce message

Sujets en rapport avec ce message

Problème de paramètre [ par jeromedu94 ] bonjour,je voudrais faire une fonction mais le nombre de paramètre à transmettre n'est pas fixe,  et je voudrais savoir comment il faut faire.C'est le Tableaux en paramètre de fonction [ par jazz2 ] Si les pointeurs sont l'unique façon de passer un tableau en paramètre de fonction, alors comment passer un tableau comme paramètre de fonction, de so Problème avec l'ouverture totale de certains fichiers! [ par ndubien ] Bonjour, J'ai un problème avec l'une de mes fonctions, cette derniere est censée ouvrir tous les fichiers du début à la fin mais lorsqu'elle renc problème de conio.h avec Borland C [ par othland ] slt tlmje travaille actuelement avec Borland C et je veux utilser la fonction textcolor qui est définie dans la librairie conio.het là, j'ai un problè programeation d'une type de puissance [ par awalle ] bon soir à tout le monde j'ai un problème de la fonction puissance en langage C. Mon problème est le faite que, je veux programmer en langage C problème retour de valeur [ par totoscill ] Bonjour,J'ai un problème avec une fonction que j'utilise.Elle me sert a compter la valeur du compteur de ma carte d'acquisition et de renvoyé cette va Structure en paramètre de fonction [ par jazz2 ] J'ai créé une structure dans un programme. Je modifie ces données dans une fonction, et j'aimerai qu'à la sortie de cette fonction, ces modifications Problème avec IO Comletion Port [ par darktealk ] Bonjour,    Mon système est bien en place tout fonctione, seulement à un moment après plusieurs cycles de lecture/écriture sur les sockets. La fonctio Programme externe avec paramêtre [ par hardgamer666 ] Salut tout le monde,Voilà, j'ai un petit problème, j'aimeraislancé une application depuis un programme consol écrit en C++. Le problème c'est que je n Hook et focus [ par krokro6 ] Salut à tous, j'ai un gros problème depuis que j'ai commencé à utiliser les hooks, le problème est le suivant : pourquoi quand j'apelle ma fonction qu


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 1,560 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.