From 077d05ac46e40a271e2ade300c571764ef4f80ca Mon Sep 17 00:00:00 2001 From: NOKIAO <62821977+luojiaaoo@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:47:55 +0800 Subject: [PATCH] fix: optimize CAN receive timeout timing with perf_counter --- can/interfaces/vector/canlib.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/can/interfaces/vector/canlib.py b/can/interfaces/vector/canlib.py index 8bdd77b83..f2a3fa2e6 100644 --- a/can/interfaces/vector/canlib.py +++ b/can/interfaces/vector/canlib.py @@ -704,7 +704,7 @@ def _apply_filters(self, filters: CanFilters | None) -> None: LOG.warning("Could not reset filters: %s", exc) def _recv_internal(self, timeout: float | None) -> tuple[Message | None, bool]: - end_time = time.time() + timeout if timeout is not None else None + end_time = time.perf_counter() + timeout if timeout is not None else None while True: try: @@ -721,7 +721,7 @@ def _recv_internal(self, timeout: float | None) -> tuple[Message | None, bool]: return msg, self._is_filtered # if no message was received, wait or return on timeout - if end_time is not None and time.time() > end_time: + if end_time is not None and time.perf_counter() > end_time: return None, self._is_filtered if HAS_EVENTS: @@ -729,7 +729,7 @@ def _recv_internal(self, timeout: float | None) -> tuple[Message | None, bool]: if end_time is None: time_left_ms = INFINITE else: - time_left = end_time - time.time() + time_left = end_time - time.perf_counter() time_left_ms = max(0, int(time_left * 1000)) WaitForSingleObject(self.event_handle.value, time_left_ms) # type: ignore else: