diff --git a/include/ascs/base.h b/include/ascs/base.h index f15f650b51be883d5a917e2dab78912fc09b5c5d..b41f91b342b62bf6c8b1c54a23fbae7ed018c3d2 100644 --- a/include/ascs/base.h +++ b/include/ascs/base.h @@ -500,16 +500,16 @@ template struct obj_with_begin_time_promise : public obj_with_begin_ #endif //free functions, used to do something to any container(except map and multimap) optionally with any mutex -template -void do_something_to_all(_Can& __can, _Mutex& __mutex, const _Predicate& __pred) {std::lock_guard lock(__mutex); for (auto& item : __can) __pred(item);} +template class LockType = std::lock_guard> +void do_something_to_all(_Can& __can, _Mutex& __mutex, const _Predicate& __pred) {LockType<_Mutex> lock(__mutex); for (auto& item : __can) __pred(item);} template void do_something_to_all(_Can& __can, const _Predicate& __pred) {for (auto& item : __can) __pred(item);} -template +template class LockType = std::lock_guard> void do_something_to_one(_Can& __can, _Mutex& __mutex, const _Predicate& __pred) { - std::lock_guard lock(__mutex); + LockType<_Mutex> lock(__mutex); for (auto iter = std::begin(__can); iter != std::end(__can); ++iter) if (__pred(*iter)) break; } @@ -533,22 +533,22 @@ size_t get_size_in_byte(const _Can& __can, size_t& size) } //member functions, used to do something to any member container(except map and multimap) optionally with any member mutex -#define DO_SOMETHING_TO_ALL_MUTEX(CAN, MUTEX) DO_SOMETHING_TO_ALL_MUTEX_NAME(do_something_to_all, CAN, MUTEX) +#define DO_SOMETHING_TO_ALL_MUTEX(CAN, MUTEX, LOCKTYPE) DO_SOMETHING_TO_ALL_MUTEX_NAME(do_something_to_all, CAN, MUTEX, LOCKTYPE) #define DO_SOMETHING_TO_ALL(CAN) DO_SOMETHING_TO_ALL_NAME(do_something_to_all, CAN) -#define DO_SOMETHING_TO_ALL_MUTEX_NAME(NAME, CAN, MUTEX) \ -template void NAME(const _Predicate& __pred) {std::lock_guard lock(MUTEX); for (auto& item : CAN) __pred(item);} +#define DO_SOMETHING_TO_ALL_MUTEX_NAME(NAME, CAN, MUTEX, LOCKTYPE) \ +template void NAME(const _Predicate& __pred) {LOCKTYPE lock(MUTEX); for (auto& item : CAN) __pred(item);} #define DO_SOMETHING_TO_ALL_NAME(NAME, CAN) \ template void NAME(const _Predicate& __pred) {for (auto& item : CAN) __pred(item);} \ template void NAME(const _Predicate& __pred) const {for (auto& item : CAN) __pred(item);} -#define DO_SOMETHING_TO_ONE_MUTEX(CAN, MUTEX) DO_SOMETHING_TO_ONE_MUTEX_NAME(do_something_to_one, CAN, MUTEX) +#define DO_SOMETHING_TO_ONE_MUTEX(CAN, MUTEX, LOCKTYPE) DO_SOMETHING_TO_ONE_MUTEX_NAME(do_something_to_one, CAN, MUTEX, LOCKTYPE) #define DO_SOMETHING_TO_ONE(CAN) DO_SOMETHING_TO_ONE_NAME(do_something_to_one, CAN) -#define DO_SOMETHING_TO_ONE_MUTEX_NAME(NAME, CAN, MUTEX) \ +#define DO_SOMETHING_TO_ONE_MUTEX_NAME(NAME, CAN, MUTEX, LOCKTYPE) \ template void NAME(const _Predicate& __pred) \ - {std::lock_guard lock(MUTEX); for (auto iter = std::begin(CAN); iter != std::end(CAN); ++iter) if (__pred(*iter)) break;} + {LOCKTYPE lock(MUTEX); for (auto iter = std::begin(CAN); iter != std::end(CAN); ++iter) if (__pred(*iter)) break;} #define DO_SOMETHING_TO_ONE_NAME(NAME, CAN) \ template void NAME(const _Predicate& __pred) {for (auto iter = std::begin(CAN); iter != std::end(CAN); ++iter) if (__pred(*iter)) break;} \ diff --git a/include/ascs/service_pump.h b/include/ascs/service_pump.h index b42ba46aa8af01ad74a4ebf5a7605a5c822edce0..6aea9d5e96dc22468cd862711f3fd4bd5f8eb201 100644 --- a/include/ascs/service_pump.h +++ b/include/ascs/service_pump.h @@ -276,8 +276,8 @@ protected: size_t run() {while (true) {try {return asio::io_context::run();} catch (const std::exception& e) {if (!on_exception(e)) return 0;}}} #endif - DO_SOMETHING_TO_ALL_MUTEX(service_can, service_can_mutex) - DO_SOMETHING_TO_ONE_MUTEX(service_can, service_can_mutex) + DO_SOMETHING_TO_ALL_MUTEX(service_can, service_can_mutex, std::lock_guard) + DO_SOMETHING_TO_ONE_MUTEX(service_can, service_can_mutex, std::lock_guard) private: void add(object_type i_service_) diff --git a/include/ascs/timer.h b/include/ascs/timer.h index 9970139e869988dbf02e5892d93c99d8a74febeb..df6e6896f9fa46c181a07421adfe10c0d5cf2259 100644 --- a/include/ascs/timer.h +++ b/include/ascs/timer.h @@ -118,8 +118,8 @@ public: void stop_all_timer() {do_something_to_all([this](timer_info& item) {this->stop_timer(item);});} void stop_all_timer(tid excepted_id) {do_something_to_all(ASCS_COPY_ALL_AND_THIS(timer_info& item) {if (excepted_id != item.id) this->stop_timer(item);});} - DO_SOMETHING_TO_ALL_MUTEX(timer_can, timer_can_mutex) - DO_SOMETHING_TO_ONE_MUTEX(timer_can, timer_can_mutex) + DO_SOMETHING_TO_ALL_MUTEX(timer_can, timer_can_mutex, std::lock_guard) + DO_SOMETHING_TO_ONE_MUTEX(timer_can, timer_can_mutex, std::lock_guard) protected: bool start_timer(timer_info& ti, unsigned interval_ms) diff --git a/include/ascs/udp/socket.h b/include/ascs/udp/socket.h index 6a8e37b048bd465a8d9de486ab9cec89faea6752..1317f131619b4f4a6d45effe708173b289f9687c 100644 --- a/include/ascs/udp/socket.h +++ b/include/ascs/udp/socket.h @@ -475,7 +475,7 @@ protected: return true; } else - unified_out::error_out("invalid peer ip address"); + unified_out::error_out("invalid peer path"); return false; }