Passage de parametre 32bits.

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 4 juil. 2006 à 11:14
mathusale_ftl Messages postés 36 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 18 août 2006 - 18 août 2006 à 10:28
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

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
4 juil. 2006 à 11:48
En castant ton pointeur ca passe pas ?  Bizarre ca!

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2006 à 11:49
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++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
4 juil. 2006 à 15:12
heu à mon avis je doit faire un truc pas correcte, avez vous un exemple svp ?
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
4 juil. 2006 à 16:32
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
4 juil. 2006 à 17:10
les thread de boost ? késako?
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
4 juil. 2006 à 17:37
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 .
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2006 à 20:20
ben oui semble correct, à penser que l'erreur est ailleurs.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 juil. 2006 à 21:57
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2006 à 22:08
param local avant appel du thread, ah non j'ai exclus d'office cette hypothèse.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 juil. 2006 à 22:53
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 juil. 2006 à 00:49
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++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
5 juil. 2006 à 09:47
Merci vecchio ce faire traiter de nul c'est fait tjrs plaisir.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
5 juil. 2006 à 10:02
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 juil. 2006 à 10:44
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++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
5 juil. 2006 à 10:56
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.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 juil. 2006 à 11:18
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
0
mathusale_ftl Messages postés 36 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 18 août 2006
17 août 2006 à 00:34
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2006 à 00:50
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++
0
mathusale_ftl Messages postés 36 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 18 août 2006
17 août 2006 à 09:02
Pourquoi l'adresse serait écrasé?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2006 à 09:31
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++
0
Rejoignez-nous