2010-11-24 18 views
20

मैं हर 50 एमएमएस में अपना कोड कॉल करने के लिए एक बहुत ही सरल आवधिक टाइमर चाहता हूं। मुझे लगता है मैं तरह चाहते एक धागा है कि 50ms हर समय के लिए सोता बना सकता है (लेकिन यह एक दर्द है) ... मैं टाइमर बनाने के लिए लिनक्स एपीआई में देख शुरू कर सकता है (लेकिन यह पोर्टेबल नहीं है) ...सी ++ बूस्ट एएसआईओ सरल आवधिक टाइमर?

बढ़ावा देने के लिए .. मुझे यकीन नहीं है कि यह संभव है। क्या बढ़ावा इस कार्यक्षमता प्रदान करता है?

उत्तर

18

बूस्ट्स एएसओ ट्यूटोरियल पर दूसरा उदाहरण बताता है।
आप इसे here पा सकते हैं।

उसके बाद, check the 3rd example देखना चाहते हैं कि आप इसे फिर से एक आवधिक समय के साथ intervall

+0

ये लिंक 404 त्रुटि का कारण बनते हैं। अधिसूचना के लिए –

+1

@ फिलिप लुडविग धन्यवाद। ऐसा लगता है कि उन्होंने लिंक प्रारूप बदल दिया है। मैंने लिंक अपडेट किए हैं – Default

+0

त्वरित अपडेट के लिए धन्यवाद :) –

17

एक बहुत ही सरल, पूरी तरह कार्यात्मक उदाहरण कॉल कर सकते हैं:

#include <iostream> 
#include <boost/asio.hpp> 

boost::asio::io_service io_service; 
boost::posix_time::seconds interval(1); // 1 second 
boost::asio::deadline_timer timer(io_service, interval); 

void tick(const boost::system::error_code& /*e*/) { 

    std::cout << "tick" << std::endl; 

    // Reschedule the timer for 1 second in the future: 
    timer.expires_at(timer.expires_at() + interval); 
    // Posts the timer event 
    timer.async_wait(tick); 
} 

int main(void) { 

    // Schedule the timer for the first time: 
    timer.async_wait(tick); 
    // Enter IO loop. The timer will fire for the first time 1 second from now: 
    io_service.run(); 
    return 0; 
} 

सूचना है कि यह बहुत महत्वपूर्ण है करने के लिए expires_at() कॉल करने के लिए एक नया समाप्ति समय निर्धारित करें, अन्यथा टाइमर तुरंत आग लग जाएगा क्योंकि वर्तमान समय का समय समाप्त हो चुका है।

+0

सिस्टम का समय बदल जाने पर यह काम करेगा? – AndrewStone

+0

@AndrewStone मुझे ऐसा नहीं लगता है, लेकिन यदि आप इसके बारे में चिंतित हैं, तो आप इसके बजाय एक स्थिर टाइमर का उपयोग कर सकते हैं, जो सिस्टम समय परिवर्तनों से प्रभावित नहीं होगा। यहां एक नज़र डालें: http://www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/reference/steady_timer.html इसका उपयोग करने के लिए उपरोक्त मेरे उदाहरण को बंद करना आसान होना चाहिए। –

+0

हाँ, धन्यवाद! स्थिर टाइमर काम किया – AndrewStone

संबंधित मुद्दे