我正在使用boost 1.46,它不包括boost :: timer,还有什么方法可以计算我的功能.
我目前正在这样做:
time_t now = time(0);
<some stuff>
time_t after = time(0);
cout << after - now << endl;
Run Code Online (Sandbox Code Playgroud)
但它只是在几秒钟内给出答案,所以如果函数小于1,则显示0.
谢谢
我想写一个java注释,它是方法调用的时间.这样的事情:
@TimeIt
public int someMethod() { ... }
Run Code Online (Sandbox Code Playgroud)
并且当调用此方法时,它应该在控制台上输出此方法花了多长时间
我知道如何在python中做到这一点,这就是我想要它做的事情:
from time import time, sleep
def time_it(func):
def wrapper(*args, **kwargs):
start = time()
func(*args, **kwargs)
stop = time()
print "The function", func.__name__, " took %.3f" % (stop - start)
wrapper.__name__ = func.__name__
return wrapper
@time_it
def print_something(*args, **kwargs):
print "before sleeping"
print args, kwargs
sleep(3) # wait 3 seconds
print "after sleeping"
print_something(1, 2, 3, a="what is this?")
Run Code Online (Sandbox Code Playgroud)
所以我的问题是?我在哪里找到一些类似这样的apt文档,我试过文档,没有运气.有人可以帮忙写这样的东西吗?
我有一个相对较慢的程序(恰当地命名为慢),我想做类似的事情
time $ slow [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
在控制台(REPL)中获取时间,而不必编译程序然后运行时间.
可以这样做吗?
我遇到了一个在运行Java 8时可以创建的一个相当奇怪的问题.问题表现在JVM本身内部发生了某种时序错误.它本质上是间歇性的,但很容易重现(至少在我的测试环境中).问题是显式设置的数组值在某些情况下被销毁并替换为0.0.具体来说,在下面的代码中,array[0]在行之后评估为0.0 new Double(r.nextDouble());.然后,如果您立即array[0]再次查看其内容,它现在会将该值显示为正确的值1.0.运行此测试用例的示例输出是:
claims array[0] != 1.0....array[0] = 1.0
claims array[0] now == 1.0...array[0] = 1.0`
Run Code Online (Sandbox Code Playgroud)
我正在运行64位Windows 7,并且能够从Eclipse中以及从命令行编译时使用JDK 1.8_45,1.8_51和1.8_60重现此问题.我无法解决运行1.7_51的问题.在另一个64位Windows 7机箱上演示了相同的结果.
这个问题出现在一个大型的,非平凡的软件中,但我已经设法将其浓缩为几行代码.下面是一个小问题,用于演示此问题.这是一个相当奇怪的测试用例,但似乎都有必要导致错误.使用Random不是必需的 - 我可以r.nextDouble()用任何双重值替换所有并证明问题.有趣的是,如果someArray[0] = .45;被替换someArray[0] = r.nextDouble();,我无法复制问题(虽然没有什么特别的.45).Eclipse调试也没有任何帮助 - 它会改变时间,使其不再发生.即使是陈述良好的System.err.println()声明也会导致问题不再出现.
同样,问题是间歇性的,因此要重现问题,可能需要多次运行此测试用例.我认为在获得上面显示的输出之前,我必须运行它的次数大约是10次.在Eclipse中,我在运行后给它一两秒,然后在没有发生时将其杀死.从命令行开始 - 运行它,如果它没有发生CTRL+C退出并再试一次.似乎如果它会发生,它会很快发生.
我在过去遇到过这样的问题,但它们都是线程问题.我无法弄清楚这里发生了什么 - 我甚至看过字节码(顺便说一下,1.7_51和1.8_45之间是相同的).
关于这里发生了什么的任何想法?
import java.util.Random;
public class Test {
Test(){
double array[] = new double[1];
Random r = new Random();
while(true){
double someArray[] = new double[1];
double …Run Code Online (Sandbox Code Playgroud) 我想在iphone上编写一个简单的音频音序器,但我无法获得准确的时序.最后几天我在iphone上尝试了所有可能的音频技术,从AudioServicesPlaySystemSound和AVAudioPlayer以及OpenAL到AudioQueues.
在我的最后一次尝试中,我尝试了使用openAL的CocosDenshion声音引擎,并允许将声音加载到多个缓冲区中,然后在需要时播放它们.这是基本代码:
在里面:
int channelGroups[1];
channelGroups[0] = 8;
soundEngine = [[CDSoundEngine alloc] init:channelGroups channelGroupTotal:1];
int i=0;
for(NSString *soundName in [NSArray arrayWithObjects:@"base1", @"snare1", @"hihat1", @"dit", @"snare", nil])
{
[soundEngine loadBuffer:i fileName:soundName fileType:@"wav"];
i++;
}
[NSTimer scheduledTimerWithTimeInterval:0.14 target:self selector:@selector(drumLoop:) userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)
在初始化中,我创建声音引擎,将一些声音加载到不同的缓冲区,然后使用NSTimer建立音序器循环.
音频循环:
- (void)drumLoop:(NSTimer *)timer
{
for(int track=0; track<4; track++)
{
unsigned char note=pattern[track][step];
if(note)
[soundEngine playSound:note-1 channelGroupId:0 pitch:1.0f pan:.5 gain:1.0 loop:NO];
}
if(++step>=16)
step=0;
}
Run Code Online (Sandbox Code Playgroud)
这就是它,它应该工作,但它的时机是不稳定和不稳定的.一旦发生其他事情(在视图中绘制),它就会失去同步.
据我所知,声音引擎和openAL缓冲区已加载(在初始化代码中),然后准备立即启动alSourcePlay(source);- 所以问题可能出在NSTimer?
现在appstore中有几十个声音序列器应用程序,它们具有准确的计时.当变焦和绘图完成时,Ig"idrum"在180 bpm时具有完美的稳定节拍.所以必须有一个解决方案.
有人有什么想法吗?
在此先感谢您的帮助!
最好的祝福,
Walchy
感谢您的回答.它让我更进一步,但不幸的是没有达到目的.这是我做的:
nextBeat=[[NSDate alloc] initWithTimeIntervalSinceNow:0.1]; …Run Code Online (Sandbox Code Playgroud) 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
谢谢!布雷特
假设我有一个功能:
myFunc = function(number) {
console.log("Booyah! "+number);
}
Run Code Online (Sandbox Code Playgroud)
我希望它在设定的时间间隔内运行.听起来我应该使用setInterval,呵呵!
但是,如果我想运行相同功能的多个间隔,所有这些都在同一时间开始呢?
setInterval(function(){
myFunc(1);
}, 500);
setInterval(function(){
myFunc(2);
}, 1000);
setInterval(function(){
myFunc(3);
}, 2000);
Run Code Online (Sandbox Code Playgroud)
因此,第一个运行时间恰好两次,第二个运行一次,第二个和第三个之间相同.
你如何确保它们都在同一时间开始,以便它们同步?
我经常在System.nanoTime()对中包装代码以便对其进行计时.就像是:
long start = System.nanoTime();
methodToBeTimed();
long elapsedTime = System.nanoTime() - start;
Run Code Online (Sandbox Code Playgroud)
有什么好的计时库可以解决这个问题吗?还将接受自行开发的代码.
NB
分析器不是解决方案,因为我想在单元测试中强制执行一些时间限制,所以我想以编程方式对方法进行计时.
我试图得到以下查询可能需要多长时间的粗略(数量级)估计:
mysql> EXPLAIN SELECT t1.col1, t1_col4 FROM t1 LEFT JOIN t2 ON t1.col1=t2.col1 WHERE col2=0 AND col3 IS NULL;
+----+-------------+--------------------+------+---------------+------------+---------+-----------------------------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------------+------+---------------+------------+---------+-----------------------------+---------+--------------------------+
| 1 | SIMPLE | t1 | ref | foobar | foobar | 4 | const | 9715129 | |
| 1 | SIMPLE | t2 | ref | col1 | col1 | 4 | db2.t1.col1 | 42318 …Run Code Online (Sandbox Code Playgroud) 我正在研究计算机硬件,我们了解到使用硬件计时器可获得比软件延迟更准确的结果.我已经在汇编中写了1毫秒的软件延迟,我可以开始一个使用这个延迟重复每个毫秒的过程,并且计数器每100毫秒做一次其他事情,这种技术不如使用我的硬件计时器那么精确内置了我现在要使用的硬件.
所以我想知道用Java构建的时序有多精确?我们有System.currentTimeMillis并且Thread.sleep这些可能不使用硬件定时器,那么这些内置Java方法与硬件定时器相比有多准确?
timing ×10
java ×4
annotations ×1
audio ×1
boost ×1
c++ ×1
clock ×1
core-audio ×1
estimation ×1
ghc ×1
ghci ×1
haskell ×1
intervals ×1
iphone ×1
java-8 ×1
javascript ×1
jquery ×1
jvm ×1
macos ×1
memory ×1
mysql ×1
objective-c ×1
openal ×1
performance ×1
posix ×1
std ×1
timer ×1