Passage de parametre 32bits.

Signaler
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
Messages postés
36
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
18 août 2006
-
Yop,

Voila je crée un thread dans mon programme et je voudrait passer un paramètre (une chaine de caractère dans ce cas ci) a la ROUTINE via forcément LPVOID lpParameter de la fonction CreateThread() . Mais voila je ne sais comment m'y prendre , j'ai tenté un cast , ... en vain, je ne trouve pas comment faire.

Merci d'avance.

24 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
En castant ton pointeur ca passe pas ?  Bizarre ca!

Shell
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Un pointeur se cast en nimporte quel autre type de pointeur, ce n'est qu'une adresse.
Remets le meme cast au niveau de la routine thread.

ciao...
BruNews, MVP VC++
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
heu à mon avis je doit faire un truc pas correcte, avez vous un exemple svp ?
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Yop,

utilise les threads de boost, c'est beaucoup + simple en plus ca te donnes un code portable et ton problème se règle en 30 sec.

TuRn3r
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
les thread de boost ? késako?
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Je ne voi pas ce qui cloche , dans la signature de CreateThrea() je passe l'argument comme ceci :
(LPVOID)szText .

Et pour l'utilisé dans la routine du thread comme ceci :
(char*)lpParameter .

Je ne voi pas ou est la faute. J'ai regardé plein d'exemple sur cppfrance et ils font tous comme cela :s .
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
ben oui semble correct, à penser que l'erreur est ailleurs.

ciao...
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Mais c'est pas possible, t'es trop nul!!
Non mais t'a même pas dit quel était ton problème (compilation ou exécuction)
Est-ce que par hasard szText serait pas un tableau local (pour les thread il faut des variables globales ou bien allouées dynamiquement)?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
param local avant appel du thread, ah non j'ai exclus d'office cette hypothèse.

ciao...
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Je crois bien qu'avec deck_bsd il faut toujours envisager le pire...
Mais BruNews t'es pas en train de supporter l'Italie devant ta télé?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
C'est en entendant le bordel dehors que je viens d'apprendre qu'il y avait du foot.
Tu vois ce que je veux dire...

ciao...
BruNews, MVP VC++
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Merci vecchio ce faire traiter de nul c'est fait tjrs plaisir.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Ben oui biensur vecchio, pour un thread faut tjrs déclarer en global suis-je bête (ben oui je suis nul parrait) , c'est vrai tu sais tout toi vecchio hein , tu as la science infuse tu as tjrs su tout , tout de suite. Ben tu m'excuseras j'ai pas eu cette chance.

Et puis un admin qui traite de nul , je voi la que c'est un bon admin , c'est réponse sont constructive, rabasser les autres ça fait avancer les choses.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Fallait prendre le 'nul' sur le ton de la plaisanterie, ce qu'on pense pouvoir se permettre quand on se cotoie depuis un bon moment même si ce n'est qu'à travers ce forum.
Allez, un sourire...

ciao...
BruNews, MVP VC++
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Ha ! lol je pensai qu'il me traitai réellement de nul ,n'empeche BruNews c'est peut-être le cas , car je n'ai vu aucun smiley et puis la deuxième ligne semble atesté qu'il me traite bien de nul . Le problème avec les forum c'est que on à pas la voi , ni l'intonation et donc quand on dit que "tu es nul" sans smiley , ben je prend ça comme une injure. D'ailleur je pense que c'est le cas ici.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Ah désolé, évidemment c'était un plaisanterie. Comme tu l'a sans doute remarqué je ne suis pas un fan des smileys, mais je ferai attention la prochaine fois

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
36
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
18 août 2006

Bonjour, j'arrive un peu tard....
Mais je veux quand même corriger une petite erreur....
En effet il n'est pas obliger de passer des variables gloables à des Threads....

Exemple.... Builder

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define DEFAUT_COUNT 10000
//---------------------------------------------------------------------------
#pragma argsused

CRITICAL_SECTION critical;

void affiche_car(char cCar, unsigned uCount = DEFAUT_COUNT)
{
    for(unsigned uCpt = 0; uCpt < uCount; uCpt++ )
        printf("%c", cCar);

    printf("\n");
}

int Thread_Function1(void *pParam)
{
    EnterCriticalSection(&critical);
    affiche_car(*(char*)pParam);
    LeaveCriticalSection(&critical);

    return 1;
}

int Thread_Function2(void *pParam)
{
    EnterCriticalSection(&critical);
    affiche_car(*(char*)pParam);
    LeaveCriticalSection(&critical);

    return 1;
}

int Thread_Function3(void *pParam)
{
    EnterCriticalSection(&critical);
    affiche_car(*(char*)pParam);
    LeaveCriticalSection(&critical);

    return 1;
}

int main()
{
  HANDLE hThread1, hThread2, hThread3;
  char cCar1, cCar2, cCar3;

    cCar1 = 'A';

    hThread1 = CreateThread(NULL,
                            0,
                            (LPTHREAD_START_ROUTINE)Thread_Function1,
                            &cCar1,
                            CREATE_SUSPENDED,
                            NULL
                            );

    cCar2 = '6';

    hThread2 = CreateThread(NULL,
                            0,
                            (LPTHREAD_START_ROUTINE)Thread_Function2,
                            &cCar2,
                            CREATE_SUSPENDED,
                            NULL
                            );

    cCar3 = 'k';

    hThread3 = CreateThread(NULL,
                            0,
                            (LPTHREAD_START_ROUTINE)Thread_Function3,
                            &cCar3,
                            CREATE_SUSPENDED,
                            NULL
                            );

    InitializeCriticalSection(&critical);

    ResumeThread(hThread1);
    ResumeThread(hThread2);
    ResumeThread(hThread3);

    system("pause");
 
    return 0;
}

@ bientôt...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Attention que c'est l'exemple à ne pas suivre, passer en param à un thread une variable locale à la fonction qui lance, forte chance pour que l'adresse soit écrasée derrière CreateThread et ResumeThread.

ciao...
BruNews, MVP VC++
Messages postés
36
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
18 août 2006

Pourquoi l'adresse serait écrasé?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Le prog continue son exécution dans la fonction derrière CreateThread et sur multi processeurs tu as très peu de chance qu'il y ait le moindre arrêt.

ciao...
BruNews, MVP VC++