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

VC++ .NET Discussion :

thread et progressBar sous Visual C++


Sujet :

VC++ .NET

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par d�faut thread et progressBar sous Visual C++
    Bonjour � tous

    J'essaie de m'entrainer u peu � l'utilisation des thread avec Visual C++ et je cherche � commencer par quelque chose d'� priori simple: modifier l'avancement d'une progresse barre.
    En gros je veux faire en sorte que ma progresse barre passe de 0 � 100% en 10 secondes et � la fin de ces 10 secondes je fais un autre traitement.
    J'ai d�ja fait des thread similaire en Java mais la syntaxe du C++ et plus particuli�rement avec Visual me pause des probl�mes.
    Je pense que c'est un probl�me tellement banal que la solution doit �tre bien connue et pourtant je ne trouve rien de concret en C++.

    Quelqu'un a t'il une id�e ?

    En gros je veux que mon thread fasse appelle a un code de ce genre:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    for(int i = 0; i<=100; i++)
    {	
    	this->progressBar1->Value=i;
            Sleep(100);  // connait pas l'équivalent C++ de cette fonction
    }
    Je suppose que mon thread doit au moins prendre en param�tre l'objet progressBar qui doit �tre incr�ment�.

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par d�faut
    J'essaie de partir de quelque chose de plus simple:

    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
     
     
    Le fichier qui fait office de main:
    ################################
     
    // STR_Project.cpp : fichier projet principal.
     
    #include "stdafx.h"
    #include "Form1.h"
     
    using namespace STR_Project;
     
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
        BaseTerre terre;
        Sonde sonde;
     
        pthread_t thread_terre;
        pthread_t thread_sonde;
     
        pthread_attr_t pattr1;
        pthread_attr_t pattr2;
     
        int a = pthread_create(&thread_terre, &pattr1, BaseTerre::run, &terre);
        int b = pthread_create(&thread_sonde, &pattr2, Sonde::run, &sonde);
     
        return 0;
    }
    #############################
     
    Ma classe BaseTerre:
    #############################
    void BaseTerre::run(void* param)
    {
        ((BaseTerre *)param)->work();  
    }
     
    void BaseTerre::work()
    {
        cout<<"base"<<endl;
    }
    #############################
     
    Ma classe Sonde
    #############################
    void Sonde::run(void* param)
    {
        ((Sonde *)param)->work();
    }
     
    void Sonde::work()
    {
        cout<<"sonde"<<endl;
    }
    ###########################
    Je repr�cise que je d�veloppe sous window avec Visual studio 2005 C++, j'ai inclut la librairie pthread dans mon projet.

    Voici l'erreur que j'obtiens pourles 2 create_threads:
    Erreur 1 error C2664: 'pthread_create' : impossible de convertir le param�tre 3 de 'void (__clrcall *)(void *)' en 'void *(__clrcall *)(void *)'

    Qu'est ce qui ne va pas ?

  3. #3
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Attends, tu m�langes pthread et .Net ?

    D�j� que je d�conseillerais d'utiliser les fonctions de multithreading natif de l'API Windows dans un programme en C++/CLI, je d�conseille encore plus d'y utiliser pthread.

    Si tu programmes en .Net, utilise plut�t les fonctions de multithreading de .Net (classe System::Threading::Thread et Cie).
    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.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par d�faut
    A la base j'ai cr�� une application formulaire en C++, je ne comprend d�j� pas pourquoi Visual me fait des chose en .Net

    Ensuite je voulais utiliser pthread pour ne pas trop d�payser les personnes qui vont relire mon code derri�re moi.

    Je me suis rendu compte que je n'avais pas correctement linker la librairie.
    Maintenant je n'ai plus de message d'erreur mais �a plante....
    J'ai modifi� un peu le main

    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
     
    // STR_Project.cpp*: fichier projet principal.
     
    #include "stdafx.h"
    #include "Form1.h"
     
    using namespace STR_Project;
    static void* showForm(void* param)
    {
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    	Application::Run(gcnew Form1());
    	return NULL;
    }
     
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	BaseTerre terre;
    	Sonde sonde;
     
    	pthread_t thread_terre;
    	pthread_t thread_sonde;
    	pthread_t thread_form;
     
     
    	int a = pthread_create(&thread_terre, NULL, BaseTerre::run, &terre);
    	int b = pthread_create(&thread_sonde, NULL, Sonde::run, &sonde);
    	int x = pthread_create(&thread_form, NULL, showForm, NULL);
     
    	return 0;
    }
    Si je voulais utiliser les thread de .net comment faudrait il que je m'y prenne ?

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Citation Envoy� par goingoin Voir le message
    A la base j'ai cr�� une application formulaire en C++, je ne comprend d�j� pas pourquoi Visual me fait des chose en .Net
    Parce que les "Formulaires" ("Windows Forms"), c'est du .Net.

    Quant au multithreading .Net, je ne sais pas trop, je ne l'ai jamais utilis� en C++/CLI. Pour .Net, je suis plut�t du genre � programmer en C#, donc il faudra attendre l'arriv�e ici d'un type plus cal� que moi.
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par d�faut
    J'ai suivi un tuto qui explique comment faire des threads selon la methode VC.
    �a marche d�j� mieux mais j'essaie d'acc�der par l'interm�diaire de mon thread � un objet qui a �t� instanci� par un autre.
    Op�ration inter-threads non valide*: le contr�le 'progressBar1' a fait l'objet d'un acc�s � partir d'un thread autre que celui sur lequel il a �t� cr��.

    Comment faire pour qu'un thread interagisse avec un �l�ment qu'il n'a pas lui m�me instanci� ?

Discussions similaires

  1. [MSChart] creation de courbe sous visual C++
    Par gabriel knight dans le forum MFC
    R�ponses: 5
    Dernier message: 18/09/2006, 14h32
  2. Impression sous visual c++
    Par zeze511 dans le forum MFC
    R�ponses: 2
    Dernier message: 16/02/2004, 12h02
  3. probl�me de compilation sous visual C++
    Par fabmili dans le forum MFC
    R�ponses: 4
    Dernier message: 08/02/2004, 19h52
  4. R�ponses: 3
    Dernier message: 28/01/2004, 10h46
  5. Deplacer un curseur dans un RichEdit sous visual c
    Par tweek dans le forum Windows
    R�ponses: 7
    Dernier message: 14/01/2004, 00h29

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