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. #41
    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
    Autant pour moi, DEBUG_NEW n'est utilisé que par le debugger de Visual.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  2. #42
    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
    non non c'est pas grave t'étais pas au courant, mais alors, comment faire pour savoir là ou j'ai mes fuites...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  3. #43
    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
    Un ptit up car je ne m'en ors pas, j'ai pourtant bien verifié, je pense bien avoir verifié toutes mes allocation sont bien libéré (enfin ça c'est que je crois mais la preuve que non). Alors si quelqu'un a une solution sous codeblocks et ming pour voir les alloc pas libere....

    Merci!
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  4. #44
    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 519
    Points
    41 519
    Par défaut
    Il y a bien le truc d'Emmanuel Delahaye, mais il ne marche bien que pour les malloc()...

    Sinon, puisque tu sembles aimer jouer avec HeapAlloc(), peut-être as-tu la solution de créer plusieurs heaps : Ainsi, au moment de détruire les heaps, tu devrais savoir lequel a des fuites...
    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.

  5. #45
    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
    euh.....pour tout te dire je suis pas amoureux des heap...c juste que l'exemple en utilisait alors...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  6. #46
    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
    Bonjour tous le monde !

    Toujours dans me galères de mémoire (j'arrète d'utiliser le mot fuite ça fait beaucoup trop glousser mes collègues ).
    J'ai récuperer le logiciel MemProof, quand je lance mon appli avec, elle crash alors que quand je lance mon appli seule il n'y a aucun souci...
    MemProof m'indique :
    Exception C0000005 ACCESS_VIOLATION at 62409E84
    Bon, problème mémoire si je comprend bien. Pour m'aider un peu j'avais mis des cout un peu partout, pour debugger, mais quand je l'execute avec MemProof la fenetre se ferme directe et n'étant pas superman (pourtant j'ai essayé, si si mes fesses s'en souviennent) j'ai pas le temps de lire. Je me suis donc dis, je compile l'appli en mode GUI et je redirige mes cout vers un fichier comme quand on active la SDL... Oui mais là... Comment je fais moi pour rediriger mes cout?

    Alors comme d'ab je fais appel aux ames génreuse et qui en ont pas encore trop mar de moi et de mes questions...

    Merci d'avance !
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  7. #47
    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
    Sinon tu peux utiliser OutputDebugString() pour tes traces combiné avec le logiciel DebugView.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  8. #48
    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 spoutspout pour ta réponse, exactement ce qu'il me fallait et en plus ça s'affiche en direct dans MemProof sans avoir besoin de DebugView qui est tout de même très interessant.
    Alors avec les traces que j'ai mis en place j'en arrive à la conclusion que c'est cette ligne qui cause l'erreur d'ACCESS_VIOLATION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hThread = CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
    J'ai mis une trace juste au debut de la fonction lectureFichierGPS pour voire si ça venait d'elle mais la trace ne s'affiche pas, cela viens donc de CreateThread(). Bon ok... mais quoi exactement? le pData? mais pourquoi? je vois vraiment pas... Et pourquoi l'application plante avec MemProof et pas quand je la lance normalement?
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  9. #49
    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
    Et pourquoi l'application plante avec MemProof et pas quand je la lance normalement?
    Je dirais plutôt que ton programme "tombe en marche" quand tu n'utilises pas MemProof
    Je pense aussi que c'est le pData qui pose problème, de toute façon à cette ligne je ne vois pas grand chose d'autre...
    Montre tout et seulement le code qui utilise ton pData, et on va revoir tout depuis le début....
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  10. #50
    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
    Arf, j'adore l'expression "tombe en marche", tout à fait ça lol !
    Alors voici mon code :
    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
    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
        {
            OutputDebugString("Waiting for connection...");
            if ((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
            {
                OutputDebugString("Connection established !");
                fileName = attenteInfos(1564, csock);
                closesocket(csock);
            }
            if (fileName != "NOP")
            {
                OutputDebugString("File received, current processing file...");
                pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
                pData->fileNameLink = strdup(fileName.c_str());
                OutputDebugString("Creating thread...");
                hThread = CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
                OutputDebugString("Thread created !");
                OutputDebugString("Closing handle...");
                CloseHandle(hThread);
                OutputDebugString("Handle closed !");
            }
            else
            {
                OutputDebugString("File not received, same MD5 !");
            }
        }
        while (1);
        closesocket(sock);
        WSACleanup();
    }
    Ainsi que le Typedef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct MyData
    {
        char *fileNameLink;
    } MYDATA, *PMYDATA;
    Merci spoutspout pour ta patience, un jour j'espère pouvoir moi aussi t'aider... (tu sais faire les pattes?)
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  11. #51
    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 519
    Points
    41 519
    Par défaut
    Bonjour,
    1. Pour être sûr, tu devrais rajouter pData=NULL juste après le CreateThread().
    2. Peux-tu montrer précisément comment tu t'en sers dans le nouveau thread ?
    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.

  12. #52
    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
    A priori je vois pas... Le seul point obscur pour moi est le HeapAlloc() que je n'ai jamais utilisé, mais d'après ce que j'ai pu lire dans la MSDN, l'appel a l'air correct.
    Néanmoins, j'ai quelques remarques:
    • Tu ne vérifies jamais le retour de strdup() ou HeapAlloc(). Fais attention, ils peuvent être NULL...
    • D'après l'agencement du code, tu peux aller dans le 2e IF de la boucle sans forcément avoir quelque chose dans filename. Ca peut être cause de soucis pour la suite
    J'ai appris par expérience que des erreurs qui n'ont pas l'air peuvent jouer leur rôle dans un plantage.
    J'essairais ton code demain dans la soirée, et je te tiens au courant, à moins bien sûr que quelqu'un trouve avant où est l'erreur
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  13. #53
    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 et spoutspout je vais rajouter pData = NULL.
    Voici comment je me sert de mon pData dans le nouveau thread (en même temps je met tout le code on sait jamais au cas ou vous veriez autre chose... :
    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
    DWORD WINAPI lectureFichierGPS(LPVOID lpParam)
    {
        OutputDebugString("Thread launch !");
        string nom, utilisateur, constructeur, model, osVersion, cpu, ram, fileName;
        int maxSofts, x = 1;
        PMYDATA pData;
     
        pData = (PMYDATA)lpParam;
        fileName = pData->fileNameLink;
     
        OutputDebugString("Reading and save file !");
     
        c_inifile_init(fileName.c_str(), NULL);
        {
            {
                char *iniNom =c_inifile_get_string("MACHINE", "NOM", NULL);
                nom = iniNom;
                free(iniNom);
                char *iniUtilisateur = c_inifile_get_string("MACHINE", "UTILISATEUR", NULL);
                utilisateur = iniUtilisateur;
                free(iniUtilisateur);
                char *iniConstructeur = c_inifile_get_string("MACHINE", "CONSTRUCTEUR", NULL);
                constructeur = iniConstructeur;
                free(iniConstructeur);
                char *iniModel = c_inifile_get_string("MACHINE", "MODEL", NULL);
                model = iniModel;
                free(iniModel);
                char *iniOsVersion = c_inifile_get_string("MACHINE", "VERSION OS", NULL);
                osVersion = iniOsVersion;
                free(iniOsVersion);
                char *iniCpu = c_inifile_get_string("MACHINE", "CPU", NULL);
                cpu = iniCpu;
                free(iniCpu);
                char *iniRam = c_inifile_get_string("MACHINE", "RAM", NULL);
                ram = iniRam;
                free(iniRam);
                char *maxSoftsTmp = c_inifile_get_string("SOFTS", "TOTAL", NULL);
                maxSofts = strtol(maxSoftsTmp, NULL, 0);
                free(maxSoftsTmp);
            }
            string listSofts[maxSofts];
            for (x=1 ; x<=maxSofts ; x++)
            {
                char ch[3];
                sprintf(ch, "%d", x);
                char * iniStr = c_inifile_get_string("SOFTS", ch, NULL);
                listSofts[x-1] = iniStr;
                free(iniStr);
            }
            if (verifExistOracle(nom) == 1)
                suppExistOracle(nom);
            if (insertDbOracleInfosDiv(nom, utilisateur, constructeur, model, osVersion, cpu, ram) != 0)
                OutputDebugString("Erreur lors de l'enregistrement dans la BDD Oracle \"insertDbOracleInfosDiv()\"");
            if (insertDbOracleSofts(nom, listSofts, maxSofts) != 0)
                OutputDebugString("Erreur lors de l'enregistrement dans la BDD Oracle \"insertDbOracleSofts()\"");
     
        }
        c_inifile_close();
     
        HeapFree(GetProcessHeap(), 0, pData);
     
        OutputDebugString("Thread finished !");
        return 0;
    }
    Mais bon, le plantage s'effectue avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OutputDebugString("Thread launch !");
    Donc le thread n'est même pas lancé...

    pour le 2ème if j'ai modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (fileName != "NOP" || fileName != NULL)
    Mais ça ne compile pas...normal mais que mettre à la place...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  14. #54
    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
    Pour le 2e If:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (fileName != "NOP" && !fileName.empty())
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  15. #55
    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
    paf! pourquoi j'ai voulu mettre "||"???? arf! merci encore spoutspout !
    Faut absolument que j'aprenne les attributs des string genre .empty, .lenght etc..
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  16. #56
    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 crois que j'ai trouvé... CreateThread() attend un pointeur sur une routine à lancer. Essaye donc plutôt ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hThread = CreateThread(NULL, 0, &lectureFichierGPS, pData, 0, NULL);
    L'erreur n'aurait donc rien à voir avec le pData.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  17. #57
    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 519
    Points
    41 519
    Par défaut
    Attention aussi, dans ton thread tu oublies le free(pData->fileNameLink), pData->fileNameLink=NULL avant l'appel à HeapFree()...
    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.

  18. #58
    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 519
    Points
    41 519
    Par défaut
    Au fait, je n'avais pas vu ça, mais vu que ton programme utilise la bibliothèque runtime C et C++, tu devrais lancer ton thread avec _beginthreadex() au lieu de CreateThread()...

    (attention, une fonction passée à _beginthreadex() doit retourner un UINT au lieu d'un DWORD).
    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.

  19. #59
    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
    Au fait, je n'avais pas vu ça, mais vu que ton programme utilise la bibliothèque runtime C et C++, tu devrais lancer ton thread avec _beginthreadex() au lieu de CreateThread()...
    L'un est plus sûr que l'autre? Moins coûteux? Plus rapide?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  20. #60
    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
    Eu medinoc... il me dit que _beginthreadex() n'est pas déclaré, ça marche cette fonction avec un compilo autre que celui de vc++?
    Ca pose un réel problème d'utiliser CreateThread()?
    J'ai bien rajouter la libération de pData comme tu me l'a montré...

    Merci spouspout pour l'info ! Mais ça gauffre toujours au meme endroit...

    Edito : Si ça peut aider il y a un truc que je trouve bizar, quand j'execute normalement mon prog j'ai 1 seul thread ans le gestionnaire des taches, mais quand j'execute exactement le même exe avec MemProof il y en a 4...
    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, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  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, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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