IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Liberation de la memoire en Multi-Thread


Sujet :

C++

  1. #1
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut Liberation de la memoire en Multi-Thread
    Bonjour à tous !

    Et oui... Ca faisait longtemp que j'avais pas poster sur le forum donc je me relance

    Alors voila mon problème, j'ai une appli (encore ma gestion de parc) qui reçoit en winsock un fichier puis doit le traiter. Le traitement de ce fichier se fait dans un thread séparé de la gestion de la reception winsock. Pour créer le thread j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
    Le gros souci c'est que ok le thread se termine bien, dans le gestionnaire de tache je vois bien que pendant un moment il monte à 2 thread puis redescend à 1 mais le problème c'est que la mémoire utilisé par mon programme augmente et ne redescend jamais, et oui un gros souci de libération de mémoire... Je pensais devoir utilisé un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CloseHandle(hThread[i]);
    Mais le gros souci c'est que il faut attendre la fin du thread pour faire ça, moi là je peux pas attendre la fin puisque pendant ce temps je traite un nouveau fichier.

    Une petite idée messieurs?
    Cette gestion de parc touche à sa fin... (enfin pour le moteur du moins, l'administration avec interface graphique faut que je vois, faut que je me mette à QT )
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Les seuls espaces de mémoire qui pourraient rester à la fin du thread viendraient d'allocations crées avec un new mais pas libérées. Toutes les variables créées localement dans le thread sont détruites avec celui-ci.

    Toujours la même règle : à chaque new doit être associé un delete

    Ton "pData" étant un pointeur, est-ce que son espace mémoire est bien libéré à la fin de ton thread?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  3. #3
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Merci pour ta réponse
    Justement le pData est créer dans la fonction qui appelle le thread, comment liberer cette variable puisque je ne sais pas quand le thread est fini...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  4. #4
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Ben, par exemple, à la fin du thread une fois que tu y as fini tout traitement.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  5. #5
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    J'ai rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HeapFree(GetProcessHeap(), 0, pData);
    Comme trouvé dans l'exemple sur msdn... mais ça ne change rien niveau memoir, à chaque nouveau thread 3mo à peu pres en plus pas liberé...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par Verbalinsurection Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CloseHandle(hThread[i]);
    Mais le gros souci c'est que il faut attendre la fin du thread pour faire ça,
    Moult te goures. Tu peux fermer le handle du thread dès sa création si tu ne l'utilises plus par la suite...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    C'est quoi la structure de ton pData?
    Parceque selon la complexité de ton paramètre, peut être qu'un simple à la fin de ton thread peut suffire...
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  8. #8
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    La structure est très complexe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct MyData
    {
        char *fileNameLink;
    } MYDATA, *PMYDATA;
    mdr!
    (he ho je suis debutant moi, c'est complex deja ça...)

    Merci encore pour tes réponse mai le delete n'aura t'il pas le meme effete que ce que j'ai mis?
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Un objet dynamique doit forcément être détruit de la façon dont il a été créé.
    • Si tu l'as créé avec HeapAlloc(), tu dois utiliser HeapFree()
    • Si tu l'as créé avec new, tu dois utiliser delete
    • Si tu l'as créé avec new[], tu dois utiliser delete[]
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Un objet dynamique doit forcément être détruit de la façon dont il a été créé.
    • Si tu l'as créé avec HeapAlloc(), tu dois utiliser HeapFree()
    • Si tu l'as créé avec new, tu dois utiliser delete
    • Si tu l'as créé avec new[], tu dois utiliser delete[]
    Pas mieux
    Dans ton cas tu dois libérer d'abord la mémoire pointée par le char* de ta structure, puis ensuite la mémoire utilisée par la structure elle-même.

    Faire un delete de seulement la structure libèrera la place qu'elle occupe (un pointeur sur un char ~ 32 bits) mais supprimera par la même occasion le seul lien avec la zone mémoire pointée par ton char* (~3Mo d'après toi).
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  11. #11
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Ok merci médinoc je l'ai créé avec heapalloc : (je laisse mon code car j'ai un peu de mal à expliquer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    DWORD WINAPI lectureFichierGPS(LPVOID lpParam)
    {
        string fileName;
        int maxSofts, x = 1;
        PMYDATA pData;
     
        pData = (PMYDATA)lpParam;
        fileName = pData->fileNameLink;
     
    	//Traitement
     
        HeapFree(GetProcessHeap(), 0, pData);
     
        return 0;
    }
     
    void listenPort()
    {
        PMYDATA pData;
        string fileName;
        int port = 1563, sinsize;
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);
        SOCKET sock;
        SOCKET csock;
        SOCKADDR_IN sin;
        SOCKADDR_IN csin;
     
        sock = socket(AF_INET, SOCK_STREAM, 0);
        sin.sin_addr.s_addr	= INADDR_ANY;
        sin.sin_family = AF_INET;
        sin.sin_port = htons(port);
        bind(sock, (SOCKADDR *)&sin, sizeof(sin));
        listen(sock, 0);
        sinsize = sizeof(csin);
        do
        {
            cout << "Waiting for connection..." << endl;
            if ((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
            {
                cout << "Connection established !" << endl;
                fileName = attenteInfos(1564, csock);
                closesocket(csock);
            }
            if (fileName != "NOP")
            {
                cout << "File received, current processing file !" << endl;
                char *fileNameChar;
                fileNameChar = new char;
                strcpy(fileNameChar, fileName.c_str());
                pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
                pData->fileNameLink = fileNameChar;
                CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
                Sleep (1000);
                delete (fileNameChar);
            }
            else
            {
                cout << "File not received, same MD5 !" << endl;
            }
        }
        while (1);
        closesocket(sock);
        WSACleanup();
    }
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    OK, je vois
    Ce n'est pas la gestion de pData qui buggue, mais celle de fileNameChar.
    Utilise la fonction C POSIX strdup() (ou _strdup()) pour la mettre dans ta structure MYDATA, et libère-là également dans le thread (avec free()), juste avant le HeapFree(pData).

    ...Et tu pourras virer ton Sleep(), et mettre un CloseHandle() immédiatement après le CreateThread().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Merci medinoc encore, mais je pige pas trop le truc avec _strdup()...
    Le close handle va pas tuer mon thread avant l'ehure si je met pas le sleep?
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  14. #14
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Verbalinsurection Voir le message
    Le close handle va pas tuer mon thread avant l'ehure si je met pas le sleep?
    Tu peux voir le handle comme un pointeur sur le thread, et comme tous les pointeurs, le supprimer ne supprime pas ce qu'il pointe.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    CloseHandle() ne tue pas les threads. TerminateThread() tue les threads.

    Tout processus ou thread en exécution existe jusqu'a ce qu'il soit terminé, qu'il reste ou non des handles vers lui. Simplement, il disparaitra du système sitôt terminé, et c'est justement ce qu'on veut...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    De toute façon tu vas rencontrer d'autres problèmes, car tu fais alors que ton thread va l'utiliser.
    Tu peux voir un thread comme un chemin parallèle (même si ce n'est pas un autre processus) qui est pris par l'exécution de ton code au moment du CreateThread. Sur un chemin tu vas supprimer ta variable alors que l'autre chemin va en avoir besoin
    Sur ce point, la solution est de faire le delete à la fin du chemin qui utilise la variable, c'est à dire à la fin du thread.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  17. #17
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Ok pour le close handle, mais pour le _strdup() ?
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  18. #18
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Pour le delete j'ai modifié un peu mon code comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    void listenPort()
    {
        PMYDATA pData;
        string fileName;
        int port = 1563, sinsize;
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);
        SOCKET sock;
        SOCKET csock;
        SOCKADDR_IN sin;
        SOCKADDR_IN csin;
        HANDLE hThread;
     
        sock = socket(AF_INET, SOCK_STREAM, 0);
        sin.sin_addr.s_addr	= INADDR_ANY;
        sin.sin_family = AF_INET;
        sin.sin_port = htons(port);
        bind(sock, (SOCKADDR *)&sin, sizeof(sin));
        listen(sock, 0);
        sinsize = sizeof(csin);
        do
        {
            cout << "Waiting for connection..." << endl;
            if ((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
            {
                cout << "Connection established !" << endl;
                fileName = attenteInfos(1564, csock);
                closesocket(csock);
            }
            if (fileName != "NOP")
            {
                cout << "File received, current processing file !" << endl;
                pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
                strcpy(pData->fileNameLink, fileName.c_str());
                hThread = CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
                CloseHandle(hThread);
            }
            else
            {
                cout << "File not received, same MD5 !" << endl;
            }
        }
        while (1);
        closesocket(sock);
        WSACleanup();
    }
    edito :
    oups ça plante...
    J'ai un peu de mal j'avoue... Comment supprimer cette variable inconnu dans la fonction du thread sachant qu'il peut y avoir plusieur thread en même temps...
    par contre depuis l'ajout du closehandle je recupère pas mal de memoire, au lieu de perdre plus de 3Mo à chaque fois j'en perd 1...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  19. #19
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Je pense que Medinoc te parle d'utilise StrDup à la place de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(pData->fileNameLink, fileName.c_str());
    car tu n'as aucune taille allouée à pData->fileNameLink. StrDup va te dupliquer l'espace mémoire correspondant à la taille de ta chaîne de caractères.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  20. #20
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    comme ça ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                cout << "File received, current processing file !" << endl;
                char *fileNameChar;
                fileNameChar = new char;
                strcpy(fileNameChar, fileName.c_str());
                pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
                pData->fileNameLink = strdup(fileNameChar);
                hThread = CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
                CloseHandle(hThread);
                Sleep (1000);
                delete (fileNameChar);
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 10h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 19h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 12h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 13h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo