如何在特定时间生成活动?例如,假设我想在上午8:00生成警报,通知我上午8:00(或在任何给定时间通知我当前时间的事件).
伙计们,在我的应用程序中,我正在使用clock_gettime(CLOCK_MONOTONIC)它来测量帧之间的增量时间(gamedev中的典型方法),并且我不时会遇到奇怪的行为clock_gettime(..)- 返回的值偶尔也不是单调的(即上一次.是更大的比目前的时间).
目前,如果发生这样的悖论,我只需跳过当前帧并开始处理下一帧.
问题是这怎么可能呢?这是Linux POSIX实现中的一个错误clock_gettime吗?我使用的是Ubuntu Server Edition 10.04(内核2.6.32-24,x86_64),gcc-4.4.3.
我正在寻找Windows Azure上虚拟机之间时钟偏移的定量估计- 假设所有虚拟机都托管在同一个数据中心.我猜测一个VM和另一个VM之间的平均时钟偏移低于10秒,但我甚至不确定它是Azure云的保证属性.
有没有人对此事进行定量测量?
在尝试构建一个对延迟敏感的应用程序时,需要每秒发送100条消息,每条消息都有时间字段,我们要考虑优化gettimeofday.首先想到的是rdtsc基于优化.有什么想法吗 ?还有其他指针吗?返回的时间值所需的准确度以毫秒为单位,但如果该值偶尔与接收器不同步1-2毫秒,则不是很大.试图比62纳秒的gettimeofday做得更好
我刚刚编写了这个简短的C++程序来估算每秒钟的实际时钟周期数.
#include <iostream>
#include <time.h>
using namespace std;
int main () {
for(int i = 0; i < 10 ; i++) {
int first_clock = clock();
int first_time = time(NULL);
while(time(NULL) <= first_time) {}
int second_time = time(NULL);
int second_clock = clock();
cout << "Actual clocks per second = " << (second_clock - first_clock)/(second_time - first_time) << "\n";
cout << "CLOCKS_PER_SEC = " << CLOCKS_PER_SEC << "\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我得到的输出看起来像这样.
Actual clocks per second = 199139
CLOCKS_PER_SEC = …Run Code Online (Sandbox Code Playgroud) 我知道10年前,典型的时钟精度等于系统标记,其范围为10-30ms.在过去几年中,精确度分多步增加.如今,有一些方法可以测量实际纳秒的时间间隔.但是,通常的框架仍然会以大约15ms的精度返回时间.
我的问题是,哪些步骤确实提高了精度,如何以纳秒为单位进行测量,以及为什么我们仍然经常获得小于微秒的精度(例如在.NET中).
(免责声明:我之前没有问过这个奇怪的事情,所以我猜我在搜索时错过了这个问题.请关闭并指出我的问题,谢谢.我相信这属于SO而不是任何其他SOFU网站.我理解精度和准确度之间的区别.)
C++ 11定义high_resolution_clock并且它具有成员类型period和rep.但我无法弄清楚如何才能获得该时钟的精度.
或者,如果我可能达不到精度,我能以某种方式至少得到一个在纳秒之间的最小可表示持续时间的计数吗?可能用period?
#include <iostream>
#include <chrono>
void printPrec() {
std::chrono::high_resolution_clock::rep x = 1;
// this is not the correct way to initialize 'period':
//high_resolution_clock::period y = 1;
std::cout << "The smallest period is "
<< /* what to do with 'x' or 'y' here? */
<< " nanos\n";
}
Run Code Online (Sandbox Code Playgroud) 这不是一个真正的问题,抱歉.我只是想获得有关获取不同安卓制造商的时钟和闹钟的闹钟和时钟的包和类名的帮助.
我在这里列出了HTC,三星和股票Android类名.但你可以猜出包名.
// HTC
"com.htc.android.worldclock.TimerAlert",//
"com.htc.android.worldclock.AlarmAlert",//
// Samsung
"com.sec.android.app.clockpackage.ClockPackage",//
"com.sec.android.app.clockpackage.alarm.AlarmAlert",//
// Motorola
"com.motorola.blur.alarmclock.AlarmAlert",//
"com.motorola.blur.alarmclock.AlarmClock",//
"com.motorola.blur.alarmclock.AlarmTimerAlert",
// Stock Android Clock
"com.android.alarmclock.AlarmClock",// 1.5 / 1.6
"com.android.deskclock.DeskClock",//
Run Code Online (Sandbox Code Playgroud)
如果您有LG,Sony或任何其他Android制造商,请添加到此列表中.我求求你.
CLOCK_MONOTONIC似乎不可用,所以clock_gettime已经用完了.
我在某些地方读过,mach_absolute_time()可能是正确的方法,但在阅读之后它是一个'cpu依赖值',它立即让我想知道它是否在下面使用rtdsc.因此,即使它是单调的,该值也可能随时间漂移.此外,线程关联性问题可能会导致调用函数产生有意义的不同结果(使其在所有内核中不是单调的).
当然,这只是猜测.有谁知道mach_absolute_time实际上是如何工作的?我实际上正在寻找clock_gettime的替代品(CLOCK_MONOTONIC ......或类似于OSX的东西.无论时钟源是什么,我都期望至少毫秒精度和毫秒精度.
我只想了解哪些时钟可用,哪些时钟是单调的,如果某些时钟漂移,有线程亲和性问题,所有Mac硬件都不支持,或者执行"超高"数量的cpu周期.
以下是我能够找到关于这个主题的链接(一些已经死链接,但在archive.org上找不到):
https://developer.apple.com/library/mac/#qa/qa1398/_index.html http://www.wand.net.nz/~smr26/wordpress/2009/01/19/monotonic-time-in -mac-os-x / http://www.meandmark.com/timing.pdf
谢谢!布雷特
我正在开发一个Android应用程序并通过确定系统首次启动时间来解决问题.我的意思是我需要测量设备首次启动时已经过了多少时间.
我知道有关侦听ACTION_BOOT_COMPLETED的解决方案并在SharedPreferences中保存任何内容,但我需要另一个解决方案,因为这个解决方案在某些情况下不起作用.也许有任何系统属性?
用例(摘自讨论)
System.currentMillis()解决这个问题的银弹将是一个时间戳,它计算自首次启动(出厂重置后)后的秒数.就像SystemClock.elapsedRealtime()每次启动后没有重置一样.不幸的是,到目前为止的答案告诉我们,这个银弹不存在.
但是,许多答案显示了如何解决这个问题的各种选择.OneWorld123评论了每个答案,如何满足他的需求.
clock ×10
android ×2
c++ ×2
system-clock ×2
azure ×1
c ×1
c# ×1
c++-chrono ×1
c++11 ×1
class ×1
datetime ×1
duration ×1
gcc ×1
gettimeofday ×1
java ×1
linux ×1
macos ×1
objective-c ×1
optimization ×1
package ×1
posix ×1
time ×1
timing ×1
winforms ×1