मुझे उम्मीद है कि नमस्ते, दुनिया को प्रिंट करने के लिए नीचे दिए गए कोड की उम्मीद है! प्रत्येक 5 सेकंड, लेकिन क्या होता है कि प्रोग्राम 5 सेकंड के लिए रुक जाता है और उसके बाद किसी भी विराम के साथ संदेश को ऊपर और ऊपर प्रिंट करता है। मैं क्या खो रहा हूँ?बूस्ट asio deadline_timer
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost::asio;
using namespace std;
io_service io;
void print(const boost::system::error_code& /*e*/)
{
cout << "Hello, world!\n";
deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(print);
}
int main()
{
deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(print);
io.run();
return 0;
}
नीचे कार्य कोड जोड़ने के लिए संपादित करें। धन्यवाद दोस्तों।
#include <iostream>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost::asio;
using namespace std;
class Deadline {
public:
Deadline(deadline_timer &timer) : t(timer) {
wait();
}
void timeout(const boost::system::error_code &e) {
if (e)
return;
cout << "tick" << endl;
wait();
}
void cancel() {
t.cancel();
}
private:
void wait() {
t.expires_from_now(boost::posix_time::seconds(5));
t.async_wait(boost::bind(&Deadline::timeout, this, boost::asio::placeholders::error));
}
deadline_timer &t;
};
class CancelDeadline {
public:
CancelDeadline(Deadline &d) :dl(d) { }
void operator()() {
string cancel;
cin >> cancel;
dl.cancel();
return;
}
private:
Deadline &dl;
};
int main()
{
io_service io;
deadline_timer t(io);
Deadline d(t);
CancelDeadline cd(d);
boost::thread thr1(cd);
io.run();
return 0;
}
क्या 'CancelDeadline' के लिए है? मैंने इस वर्ग और 'रद्द करेंडलाइन सीडी (डी) पर टिप्पणी की है; बढ़ावा :: धागा thr1 (सीडी); 'और कोड अभी भी काम करता है। – javapowered
आपको इस प्रश्न में रुचि हो सकती है: http://stackoverflow.com/questions/21771639/can-i-use-a-stackful-coroutine-as-the-wait-handler-of-a-steady-timer-which -इस-डी – updogliu