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

Boost C++ Discussion :

Syntaxe entre boost deadline_timer et une class


Sujet :

Boost C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Points : 59
    Points
    59
    Par défaut Syntaxe entre boost deadline_timer et une class
    Bonsoir...

    J' essai de maitriser boost...
    Comme compilateur, j'utilise Visual Studio Express 2013

    Actuellement, je me suis créé une classe pour faire du téléchargement(http) WebClient
    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
     
    #include <boost/asio>
     
    class WebClient
    {
    	private:
    		tcp::resolver resolver_;
    		tcp::socket socket_;
    		boost::asio::streambuf request_;
    		boost::asio::streambuf response_;
    		boost::asio::streambuf datas_;
     
    		std::string mError;
     
    		void handle_resolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator);
    		void handle_connect(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator);
    		void handle_write_request(const boost::system::error_code& err);
    		void handle_read_status_line(const boost::system::error_code& err);
    		void handle_read_headers(const boost::system::error_code& err);
    		void handle_read_content(const boost::system::error_code& err);
     
    		void DownloadFailed();
    		void TimeOutFailed(const boost::system::error_code&);
     
    	public:
    		WebClient(boost::asio::io_service& io_service, Uri url)
    			: resolver_(io_service), socket_(io_service)
    		{
    			std::ostream request_stream(&request_);
    			request_stream << "GET " << url.Get_FullPath() << " HTTP/1.0\r\n";
    			request_stream << "Host: " << url.Get_HostName() << "\r\n";
    			request_stream << "Accept: */*\r\n";
    			request_stream << "Connection: close\r\n\r\n";
     
                           	boost::asio::deadline_timer t(io_service, boost::posix_time::seconds(5));
                    	t.async_wait(&WebClient::TimeOutFailed);
     
    			// Start an asynchronous resolve to translate the server and service names
    			// into a list of endpoints.
    			tcp::resolver::query query(url.Get_HostName(), "http");
    			resolver_.async_resolve(query, boost::bind(&WebClient::handle_resolve, this, boost::asio::placeholders::error, boost::asio::placeholders::iterator));
    		}
    		~WebClient();
     
    		sigc::signal<void, string&> onDownloadFailed;
    		sigc::signal<void, boost::asio::streambuf&> onDownloadCompleted;
     
    }
    Je voudrai y associer un TimeOut.
    De ce fait, je consulte la doc de boost et j'y vois une classe interressante : deadline_timer
    Je m'empresse de l'intégrer dans ma classe (cf le code du dessus).

    Lors de la génération du code, mon compilateur me nargue avec ce type d'erreurs pour le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    	t.async_wait(&WebClient::TimeOutFailed);
    error C2338: WaitHandler type requirements not met f:\...\boost_1_56_0_x86\include\boost\asio\basic_deadline_timer.hpp 505
    error C2064: le terme ne correspond pas à une fonction qui prend 1 arguments f:\...\boost_1_56_0_x86\include\boost\asio\basic_deadline_timer.hpp 505
    Quand j'enlève "&" à t.async_wait(TimeOutFailed), j'ai l'erreur suivante :
    error C3867: &'WebClient::TimeOutFailed' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'WebClient::TimeOutFailed' pour créer un pointeur vers membre
    Je ne comprend pas...
    J'avoue que j'ai un peu de mal avec l'orthographe, la syntaxique et la compréhension ce C++.

    Merci de votre aide

    Cdt,

    Davy

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Points : 59
    Points
    59
    Par défaut
    'Soir...

    Bon, je me répond car j'ai trouvé la solution à mon problème...

    voici le code nécessaire quand on utilise la classe "boost::asio::deadline_timer" à l'intérieure d'une autre classe et que l'on veut y associer une fonction lors de l' exécution de "async_wait"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boost::asio::deadline_timer timeout_;
    timeout_ est initialisé dans mon constructeur de la classe avec io_service...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boost::asio::strand srand = boost::asio::strand(io_service);
     
    timeout_.async_wait(srand.wrap(boost::bind(&WebClient::TimeOutFailed,this)));
    Voilou, voilou....

    Bonne soirée

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Merci

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

Discussions similaires

  1. collision entre un sprite d'une classe et un vector2d liste
    Par kate59 dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 21/04/2008, 23h10
  2. [UML][Debutant]Choisir entre une classe et une interface ?
    Par Laurent Dardenne dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 24/04/2006, 20h45
  3. Réponses: 14
    Dernier message: 04/12/2005, 08h08
  4. Réponses: 8
    Dernier message: 10/06/2005, 11h48
  5. Réponses: 11
    Dernier message: 31/01/2005, 17h48

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