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

Threads & Processus C++ Discussion :

thread ou pas


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 70
    Par défaut thread ou pas
    bonjour,

    je suis en train de programmer sous visual C++.

    Le but de mon projet est d'afficher le profil d'une image live d'une caméra et de le traiter (filtre). Pour l'affichage, tout va bien.

    Maintenant je suis dans la phase de traitement. Je me pose donc la question d'intégrer des threads dans mon code afin d'effectuer le traitement de l'image en parallèle de sa visualisation.

    Est ce une bonne solution ? Est ce que le thread est capable de suivre la cadence de rafraichissement de l'image de ma caméra ? Cette notion de thread est nouvelle pour moi et un peu abstraite.

    merci d'avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    La notion de thread n'est présente - si on la simplifie à l'extrême - que pour permettre le travail en parallèle (de faire deux ou plusieurs choses en même temps).

    Tu est donc bien dans un cadre d'utilisation de threads lorsque tu écris
    Maintenant je suis dans la phase de traitement. Je me pose donc la question d'intégrer des threads dans mon code afin d'effectuer le traitement de l'image en parallèle de sa visualisation.


    Quant à savoir si le traitement sera en mesure de suivre la cadence de rafraichissement de la caméra... la réponse de normand s'impose: peut être... ou pas

    Il y a énormément de paramètres qui interviennent, allant du nombre minimum d'images à afficher en une période P à la taille des images, en passant par sa complexité, le nombre de couleur et la complexité du traitement que tu veux appliquer...

    Tu auras surement beaucoup plus de chances d'obtenir une vitesse d'affichage de l'ordre de 10 images par second avec une image de 10px par 10 codée sur 256 couleurs avec un traitement léger que d'obtenir une vitesse d'affichage de l'ordre de 200 images secondes avec une image de 1000 par 1000 px codées en couleurs réelles avec un traitement lourd
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 70
    Par défaut
    merci pour cette réponse.

    je me lance donc dans les thread. je code sous visual C++ en dialog base. est-il difficile d'intégrer des thread dans mon code déjà bien avancé ou faut-il que je réorganise tout ....

    merci

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Ah, voilà encore des questions pour auxquelles il sera difficile de répondre de manière générale

    Déjà, il faut que ta manière d'utiliser les images soient "thread safe" (qu'il n'y ai pas un thread qui modifie une image pendant que tu essaye, justement, de l'afficher, ou que deux threads différents essayent, au même moment, de modifier la même image, par exemple).

    Ensuite, il faut voir la bibliothèque de gestion de thread que tu utilise, certaines étant plus facile à manipuler et ou à introduire que d'autres...

    Il est généralement utile d'envisager l'utilisation de threads séparés dés le départ, mais il n'est pas impossible, selon la complexité du projet, de partir de quelque chose d'existant pour y ajouter la gestion "cohérente" des threads...

    Jusqu'à présent, nous parlons de manière bien trop générale pour pouvoir te donner les explications qui s'appliquent à ton cas et à ton code particulier.

    Une chose est sure: tu devra sans doute effectuer une révision en profondeur de ton code, de manière à rendre l'ensemble "thread safe"... Quant à savoir si ce sera fastidieux ou complexe à réaliser, cela dépendra grandement de l'existant
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 70
    Par défaut
    merci pour ces conseils.

    je sens que ca ne va pas être aisé .....

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par marie6631 Voir le message
    merci pour ces conseils.

    je sens que ca ne va pas être aisé .....
    Aisé, peut être pas, mais surement pas impossible

    Bon courage
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,

    Citation Envoyé par marie6631 Voir le message
    Le but de mon projet est d'afficher le profil d'une image live d'une caméra et de le traiter (filtre). Pour l'affichage, tout va bien.

    Maintenant je suis dans la phase de traitement. Je me pose donc la question d'intégrer des threads dans mon code afin d'effectuer le traitement de l'image en parallèle de sa visualisation.
    Je ne vois pas trop ce que le multi-thread vient faire là-dedans. La description de ce que tu souhaites faire semble strictement séquentiel, non ?

    1) Récupérer une frame (c'est à dire un pointeur vers un bloc de mémoire)
    2) Traitement (modifier le bloc de mémoire par l'intermédiaire du pointeur)
    3) Affichage (passer le pointeur et la taille à la fonction d'affichage)

    Avec deux threads que pourrait-on faire de plus ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Thread Image                     Thread Traitement
    --------------------------------------------------
    Récupérer frame                      Attendre
                      Synchronisation
    Attendre                             Traitement
                      Synchronisation 
    Affichage                            Attendre

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    L'utilisation de la gestion de threads aurait surtout pour but de permettre de travailler sous la forme de
    • afficher image1 pendant qu'on recupère image2 et qu'on traite image3
    • afficher image3 pendant qu'on récupère image1 et qu'on traite image2
    • afficher image2 pendant qu'on récupère image3 et qu'on traite image1
    • recommencer
    (exemple parmi d'autre )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 70
    Par défaut
    merci pour ces détails

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Je ne vois pas trop ce que le multi-thread vient faire là-dedans. La description de ce que tu souhaites faire semble strictement séquentiel, non ?
    Citation Envoyé par koala01 Voir le message
    L'utilisation de la gestion de threads aurait surtout pour but de permettre de travailler sous la forme de
    • afficher image1 pendant qu'on recupère image2 et qu'on traite image3
    • afficher image3 pendant qu'on récupère image1 et qu'on traite image2
    • afficher image2 pendant qu'on récupère image3 et qu'on traite image1
    • recommencer
    (exemple parmi d'autre )
    Salut,
    Personnellement, j'y voit un intérêt souvent remonté par les utilisateurs : ne pas figer l'IHM pendant le traitement. Même si l'IHM ne permet de rien faire en attendant le résultat, elle peut afficher une animation d'attente ou de progression indiquant à l'utilisateur que tout va bien...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 70
    Par défaut
    bonjour,

    j'ai tenté de coder deux boutons pour leur faire afficher un MessageBox. Mais dès le premier bouton ca ne compile pas. 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
     
    //dans le .h
    UINT ThreadFunc(LPVOID Param);
     
    //dans le .cpp
    UINT ThreadFunc(LPVOID Param)
    {
    	CThreadtestDlg *pObject = (CThreadtestDlg*)Param;
     
    	AfxMessageBox("premier thread");
    	return 0;
     
    }
     
    void CThreadtestDlg::OnMb() 
    {
    	// TODO: Add your control notification handler code here
    	CThreadtestDlg *pNewObject = new CThreadtestDlg;
    	AfxBeginThread(ThreadFunc,pNewObject);	
    }
    l'erreur est : AfxBeginThread : none of the 2 overloads can convert parameter 1 from type unsigned int (void*)

    en modifiant mon code en mettant this à la place de pNewObject et un &ThreadFunc, ça ne fonctionne toujours pas.

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Threading ou pas threading?si oui, comment?
    Par nanettemontp dans le forum Windows
    Réponses: 59
    Dernier message: 10/10/2007, 10h55
  2. Thread ou pas Thread ?
    Par Franck.H dans le forum SDL
    Réponses: 8
    Dernier message: 04/12/2006, 21h10
  3. Boost::asio : multi threading ou pas?
    Par Alp dans le forum Boost
    Réponses: 9
    Dernier message: 02/09/2006, 22h01
  4. [blem C++ thread ou pas threads]
    Par fastzombi dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 28/10/2005, 23h09
  5. [THREAD][DAEMON]Pas bien compris....
    Par XristofGreek dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 24/09/2004, 13h28

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