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 :

boost::thread passage d'argument


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par défaut boost::thread passage d'argument
    Bonjour,

    j'ai une erreur bizarre que je ne comprend pas.

    Je veux passer un vecteur de thread en argument à un nouveau thread.

    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
     
    bool threadTimer(std::vector<boost::thread> _thread, int _timer)
    {
    	bool isFinish = false;			// Check if threatement is finish.
    	boost::timer timer;				// Get time for force close.
    	boost::thread threadExecute = boost::thread(threadTimerJoin, _thread, &isFinish);
    	// Busy waiting replace callback.
    	while (!((isFinish) || (timer.elapsed() > _timer)))
    	{
    		usleep(100);
    	}
     
    	return isFinish ? true : false;
    }
     
    void threadTimerJoin(std::vector<boost::thread> _thread, bool* isFinish)
    {
    	for (std::vector<boost::thread>::iterator it = _thread.begin(); it != _thread.end(); ++it)
    	{
    		it->join();
    	}
     
    	*isFinish = true;
    }
    Et j'obtient l'erreur :
    /usr/include/boost/bind/bind_template.hpp:20: instantiated from ‘typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F, L>::operator()() [with R = void, F = void (*)(std::vector<boost::thread, std::allocator<boost::thread> >, bool*), L = boost::_bi::list2<boost::_bi::value<std::vector<boost::thread, std::allocator<boost::thread> >*>, boost::_bi::value<bool*> >]’
    /usr/include/boost/thread/detail/thread.hpp:56: instantiated from ‘void boost::detail::thread_data<F>::run() [with F = boost::_bi::bind_t<void, void (*)(std::vector<boost::thread, std::allocator<boost::thread> >, bool*), boost::_bi::list2<boost::_bi::value<std::vector<boost::thread, std::allocator<boost::thread> >*>, boost::_bi::value<bool*> > >]’
    ../../src/thread/ThreadTimer.cpp:41: instantiated from here
    /usr/include/boost/bind/bind.hpp:306: error: conversion from ‘std::vector<boost::thread, std::allocator<boost::thread> >*’ to non-scalar type ‘std::vector<boost::thread, std::allocator<boost::thread> >’ requested
    make: *** [build/debug/../../src/thread/ThreadTimer.o] Error 1

    Erreur dont je comprends rien . Cela fonctionne si j'utilise des types primitifs, mais pas dès que je passe un vecteur.

    Merci

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    Je ne suis pas sûr que ce soit la source de l'erreur, mais si tu passes ton vector comme tu le fais, tu fais une copie du vector, et donc des éléments contenus dans le vector, or boost::thread n'est pas copiable.

  3. #3
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par défaut
    Merci de ta réponse, ça fonctionne maintenant, j'était pourtant sûr d'avoir essayé un passage par référence.

    J'ai même tenté un boost::cref(std::vector<boost:thread>)

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    Ok cool, l'essentiel est que ça marche maintenant.

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

Discussions similaires

  1. Passage d'arguments à un thread
    Par flo_k dans le forum Windows
    Réponses: 3
    Dernier message: 09/06/2008, 20h12
  2. Passage d'argument à un thread
    Par crunk dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 02/08/2007, 17h12
  3. Probleme de passage d'arguments dans un thread
    Par TheBAT dans le forum POSIX
    Réponses: 4
    Dernier message: 05/02/2007, 19h58
  4. Passage d'argument à un thread avec _Beginthreadex
    Par likenoother dans le forum MFC
    Réponses: 4
    Dernier message: 13/09/2006, 10h02
  5. Problème de passage d'argument a un thread
    Par goof_22 dans le forum SDL
    Réponses: 2
    Dernier message: 19/04/2006, 17h59

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