Это является, конечно, не 'самым самым твердым', но просто что-то для добавления к списку:
ThenBy() extension method
, не смотря на его реализацию я первоначально озадачен относительно того, как она работает. Все понимают очень хорошо, как запятая разделила работу полей сортировки в SQL - но на номинальной стоимости я скептически настроен, что ThenBy собирается сделать то, что я действительно хочу, чтобы это сделало. Как может он 'знать' то, чем было предыдущее поле сортировки - кажется, что это должно.
я прочь для исследования его теперь...
Я нашел способ сделать это с помощью функции C UpTime () , представленной в
. Это возвращает абсолютное время (зависящее от процессора), которое можно легко преобразовать во время продолжительности (миллисекунды или наносекунды). Подробности здесь: http://www.meandmark.com/timingpart1.html (время UpTime ищите в части 3)
Мне не удалось заставить mach_absolute_time ()
работать должным образом , вероятно, из-за того, что я не знаю об этом, и не могу найти много документации по нему в Интернете. Кажется, что он захватывает то же время, что и UpTime ()
, но преобразование его в двойное оставило меня ошеломленным.
[[NSApp currentEvent] отметка времени]
действительно работала, но только если приложение получало NSEvents. Если бы приложение перешло на передний план, оно не получало бы событий, и [[NSApp currentEvent] timestamp]
просто продолжало бы возвращать ту же самую старую временную метку снова и снова в методе запуска NSTimer до конца. -пользователь снова решил взаимодействовать с приложением.
Спасибо за вашу помощь, Марк и Майк! Вы оба определенно направили меня в правильном направлении, ведущем к ответу. :)
Depending on what's driving this code, you have 2 choices:
mach_absolute_time()
. It will give the time interval exactly between the points at which you called the function.[[NSApp currentEvent] timestamp]
Хорошо, это долгий путь, но вы можете попробовать реализовать что-то вроде NSSystemClockDidChangeNotification
, доступного в Snow Leopard.
Так что терпите меня, потому что это это странная идея и определенно недертерминированная. Но что, если бы у вас была нить сторожевого пса на протяжении всей программы? Этот поток каждые n секунд считывал системное время и сохранял его. Ради аргумента, давайте просто сделаем 5 секунд. Таким образом, каждые 5 секунд он сравнивает предыдущее показание с текущим системным временем. Если есть «достаточно большая» разница («достаточно большая» должна определенно быть больше 5, но не слишком сильно , чтобы учесть недетерминизм планирования процессов и приоритезации потоков), разместить уведомление о значительном изменении времени. Вам нужно будет поиграть с фаззингом значения, которое составляет «достаточно большое» (или достаточно маленькое, если часы были сброшены на более раннее время) для вашей точности.
Я знаю, что это своего рода хакерство, но запрещает любые другое решение, как вы думаете? Может ли это или что-то в этом роде решить вашу проблему?
Edit
Итак, вы изменили исходный вопрос, указав, что вы не хотите использовать сторожевой поток, потому что вы новичок в многопоточности. Я понимаю страх сделать что-то более сложное, чем вам удобно, но это может оказаться единственным решением. В этом случае вам, возможно, придется немного почитать. =)
И да, я знаю, что что-то вроде Photoshop, вытаскивающего дерьмо из процессора, является проблемой. Другое (даже более сложное) решение могло бы состоять в том, чтобы вместо сторожевого потока иметь отдельный сторожевой таймер процесс , имеющий наивысший приоритет, чтобы он был немного более невосприимчивым к привязке процессора. Но опять же, это становится действительно сложным.
Final Edit
Я собираюсь оставить все мои другие идеи, приведенные выше, для полноты, но похоже, что использование времени безотказной работы системы также будет действенным способом решения этот. Поскольку [[NSProcessInfo processInfo] systemUptime]
работает только в версии 10.6+, вы можете просто вызвать mach_absolute_time ()
. Чтобы получить доступ к этой функции, просто #include
. Это должно быть то же значение, которое возвращает NSProcessInfo
.
Final Edit
Я собираюсь оставить все мои другие идеи, приведенные выше, для полноты, но похоже, что использование времени безотказной работы системы также будет действенным способом решения этот. Поскольку [[NSProcessInfo processInfo] systemUptime]
работает только в версии 10.6+, вы можете просто вызвать mach_absolute_time ()
. Чтобы получить доступ к этой функции, просто #include
. Это должно быть то же значение, которое возвращает NSProcessInfo
.
Final Edit
Я собираюсь оставить все мои другие идеи, приведенные выше, для полноты, но похоже, что использование времени безотказной работы системы также будет действенным способом решения этот. Так как [[NSProcessInfo processInfo] systemUptime]
работает только в 10.6+, вы можете просто вызвать mach_absolute_time ()
. Чтобы получить доступ к этой функции, просто #include
. Это должно быть то же значение, которое возвращает NSProcessInfo
.
Final Edit
Я собираюсь оставить все мои другие идеи, приведенные выше для полноты, но похоже, что использование времени безотказной работы системы также будет действенным способом справиться с этим. Так как [[NSProcessInfo processInfo] systemUptime]
работает только в 10.6+, вы можете просто вызвать mach_absolute_time ()
. Чтобы получить доступ к этой функции, просто #include
. Это должно быть то же значение, которое возвращает NSProcessInfo
.
Final Edit
Я собираюсь оставить все мои другие идеи, приведенные выше для полноты, но похоже, что использование времени безотказной работы системы также будет действенным способом справиться с этим. Так как [[NSProcessInfo processInfo] systemUptime]
работает только в 10.6+, вы можете просто вызвать mach_absolute_time ()
. Чтобы получить доступ к этой функции, просто #include
. Это должно быть то же значение, которое возвращает NSProcessInfo
.
mach_absolute_time ()
. Чтобы получить доступ к этой функции, просто #include
. Это должно быть то же значение, которое возвращает NSProcessInfo
. вы можете просто вызвать mach_absolute_time ()
. Чтобы получить доступ к этой функции, просто #include
. Это должно быть то же значение, которое возвращает NSProcessInfo
.