@@ -351,16 +351,19 @@ inline int poll(std::vector<zmq_pollitem_t> const &items, long timeout_ = -1)
351351 return detail::poll (const_cast <zmq_pollitem_t *>(items.data ()), items.size (), timeout_);
352352}
353353
354- inline int
355- poll (zmq_pollitem_t *items, size_t nitems, std::chrono::milliseconds timeout = std::chrono::milliseconds{-1 })
354+ template <typename Duration = std::chrono::milliseconds>
355+ int
356+ poll (zmq_pollitem_t *items, size_t nitems, Duration timeout = std::chrono::milliseconds{-1 })
356357{
357- return detail::poll (items, nitems, static_cast <long >(timeout.count ()));
358+ auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout);
359+ return detail::poll (items, nitems, static_cast <long >(timeout_ms.count ()));
358360}
359361
360- inline int poll ( std::vector< zmq_pollitem_t > &items,
361- std::chrono::milliseconds timeout = std::chrono::milliseconds{-1 })
362+ template < typename Duration = std::chrono::milliseconds>
363+ int poll ( std::vector< zmq_pollitem_t > &items, Duration timeout = std::chrono::milliseconds{-1 })
362364{
363- return detail::poll (items.data (), items.size (), static_cast <long >(timeout.count ()));
365+ auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout);
366+ return detail::poll (items.data (), items.size (), static_cast <long >(timeout_ms.count ()));
364367}
365368
366369ZMQ_DEPRECATED (" from 4.3.1, use poll taking std::chrono::duration instead of long" )
@@ -369,11 +372,11 @@ inline int poll(std::vector<zmq_pollitem_t> &items, long timeout_)
369372 return detail::poll (items.data (), items.size (), timeout_);
370373}
371374
372- template <std::size_t SIZE>
373- inline int poll (std::array<zmq_pollitem_t , SIZE> &items,
374- std::chrono::milliseconds timeout = std::chrono::milliseconds{-1 })
375+ template <std::size_t SIZE, typename Duration>
376+ int poll (std::array<zmq_pollitem_t , SIZE> &items, Duration timeout = std::chrono::milliseconds{-1 })
375377{
376- return detail::poll (items.data (), items.size (), static_cast <long >(timeout.count ()));
378+ auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout);
379+ return detail::poll (items.data (), items.size (), static_cast <long >(timeout_ms.count ()));
377380}
378381#endif
379382
@@ -2366,6 +2369,14 @@ class monitor_t
23662369 on_monitor_started ();
23672370 }
23682371
2372+ #ifdef ZMQ_CPP11
2373+ template <typename Duration = std::chrono::milliseconds>
2374+ bool check_event (Duration timeout = std::chrono::milliseconds{0 })
2375+ {
2376+ return check_event (std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count ());
2377+ }
2378+ #endif
2379+
23692380 bool check_event (int timeout = 0 )
23702381 {
23712382 assert (_monitor_socket);
@@ -2725,17 +2736,17 @@ template<typename T = no_user_data> class poller_t
27252736 }
27262737 }
27272738
2728- template <typename Sequence>
2739+ template <typename Sequence, typename Duration = std::chrono::milliseconds >
27292740 size_t wait_all (Sequence &poller_events,
2730- const std::chrono::milliseconds timeout)
2741+ const Duration timeout)
27312742 {
27322743 static_assert (std::is_same<typename Sequence::value_type, event_type>::value,
27332744 " Sequence::value_type must be of poller_t::event_type" );
27342745 int rc = zmq_poller_wait_all (
27352746 poller_ptr.get (),
27362747 reinterpret_cast <zmq_poller_event_t *>(poller_events.data ()),
27372748 static_cast <int >(poller_events.size ()),
2738- static_cast <long >(timeout.count ()));
2749+ static_cast <long >(std::chrono::duration_cast<std::chrono::milliseconds>( timeout) .count ()));
27392750 if (rc > 0 )
27402751 return static_cast <size_t >(rc);
27412752
@@ -2804,9 +2815,11 @@ class timers
28042815 using fn_t = zmq_timer_fn;
28052816
28062817#if CPPZMQ_HAS_OPTIONAL
2807- using timeout_result_t = std::optional<std::chrono::milliseconds>;
2818+ template <typename Duration = std::chrono::milliseconds>
2819+ using timeout_result_t = std::optional<Duration>;
28082820#else
2809- using timeout_result_t = detail::trivial_optional<std::chrono::milliseconds>;
2821+ template <typename Duration = std::chrono::milliseconds>
2822+ using timeout_result_t = detail::trivial_optional<Duration>;
28102823#endif
28112824
28122825 timers () : _timers(zmq_timers_new())
@@ -2824,9 +2837,11 @@ class timers
28242837 ZMQ_ASSERT (rc == 0 );
28252838 }
28262839
2827- id_t add (std::chrono::milliseconds interval, zmq_timer_fn handler, void *arg)
2840+ template <typename Duration = std::chrono::milliseconds>
2841+ id_t add (Duration interval, zmq_timer_fn handler, void *arg)
28282842 {
2829- id_t timer_id = zmq_timers_add (_timers, interval.count (), handler, arg);
2843+ auto interval_ms = std::chrono::duration_cast<std::chrono::milliseconds>(interval);
2844+ id_t timer_id = zmq_timers_add (_timers, interval_ms.count (), handler, arg);
28302845 if (timer_id == -1 )
28312846 throw zmq::error_t ();
28322847 return timer_id;
@@ -2839,9 +2854,11 @@ class timers
28392854 throw zmq::error_t ();
28402855 }
28412856
2842- void set_interval (id_t timer_id, std::chrono::milliseconds interval)
2857+ template <typename Duration = std::chrono::milliseconds>
2858+ void set_interval (id_t timer_id, Duration interval)
28432859 {
2844- int rc = zmq_timers_set_interval (_timers, timer_id, interval.count ());
2860+ auto interval_ms = std::chrono::duration_cast<std::chrono::milliseconds>(interval);
2861+ int rc = zmq_timers_set_interval (_timers, timer_id, interval_ms.count ());
28452862 if (rc == -1 )
28462863 throw zmq::error_t ();
28472864 }
@@ -2853,12 +2870,13 @@ class timers
28532870 throw zmq::error_t ();
28542871 }
28552872
2856- timeout_result_t timeout () const
2873+ template <typename Duration = std::chrono::milliseconds>
2874+ timeout_result_t <Duration> timeout () const
28572875 {
28582876 int timeout = zmq_timers_timeout (_timers);
28592877 if (timeout == -1 )
2860- return timeout_result_t {};
2861- return std::chrono::milliseconds{timeout};
2878+ return timeout_result_t <Duration> {};
2879+ return std::chrono::duration_cast<Duration>(std::chrono:: milliseconds{timeout}) ;
28622880 }
28632881
28642882 void execute ()
0 commit comments