Я столкнулся с этой точной проблемой. Проблема в том, что peek()
возвращает Option<&T>
(необязательный обертывание ссылки, а не значения). Вы сопоставляетесь на Some(x)
, а не Some(&x)
, и это приводит к возникновению заимствования, что приводит к проблеме продолжительности жизни.
I написал сообщение в блоге об этом точном выпуск с образцом кода.
Вы не можете сделать что-то вроде:
DateTime.Now использует дату базовой ОС, которая имеет разрешение около 15 мкс или даже хуже с системами до Windows XP. Лучшее, что вы можете получить, это Таймер с высоким разрешением, доступный точно в секундомере и его тиках / часах.
Вам нужно будет сначала синхронизировать часы, но это НЕ ЗНАЧИТ «установить дату системы», , Синхронизирующие часы означают вычисление разницы между показаниями, опционально проверяя, является ли она постоянной в качестве потоков времени (то есть, проверяет, не подсчитывается ли каждый из часов быстрее других), а затем с использованием вычисленного смещения для ... смещения показаний, так что «фактические значения» относятся к одной и той же временной базе - по вашему выбору.
Google для «алгоритмов синхронизации часов», чтобы читать об этом намного больше.