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
Je voudrai y associer un TimeOut.
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; }
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);Quand j'enlève "&" à t.async_wait(TimeOutFailed), j'ai l'erreur suivante :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
Je ne comprend pas...error C3867: &'WebClient::TimeOutFailed' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'WebClient::TimeOutFailed' pour créer un pointeur vers membre
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
Partager