我有一段看起来像这样的代码:
start <- getCPUTime
(_, _, _, ph) <- createProcess (shell shellCmd)
end <- (waitForProcess ph >> getCPUTime)
print start
print end
Run Code Online (Sandbox Code Playgroud)
如您所见,代码应该在执行之前和之后运行命令shellCmd和打印getCPUTime值.但是,它工作不正确:时间差总是零或15625000000(0.015秒).据我所知,原因是懒惰,但无法解决它.我在互联网上找到了一些例子(其中一个在上面),但没有一个能为我工作.
这样做的正确方法是什么,为什么?
我有一个C#和.NET应用程序,它使用GPU(NVIDA GTX980)进行图像处理.有4个阶段,我将CPU与GPU同步(时间上没有重叠)来进行计时.但这些数字并没有加起来.
Launch()将执行GPU内核的异步启动,但synchronize()将等待它完成.
到底是怎么回事?
public static void threshold()
{
Stopwatch watch = new Stopwatch();
watch.Start();
gpu.Lock();
dim3 block = new dim3(tileWidthBig, tileHeightBig);
dim3 grid = new dim3(Frame.width / tileWidthBig, Frame.height / tileHeightBig);
gpu.Launch(grid, block).gHistogram(gForeground, gPercentile, gInfo);
gpu.Synchronize();
tHistogram = watch.Elapsed.TotalMilliseconds;
block = new dim3(1024);
grid = new dim3(1);
gpu.Launch(grid, block).gSumHistogram(gPercentile);
gpu.Synchronize();
tHistogramSum = watch.Elapsed.TotalMilliseconds - tHistogram;
gpu.Launch(grid, block).gIQR(gPercentile, gInfo);
gpu.Synchronize();
tIQR = watch.Elapsed.TotalMilliseconds - tHistogramSum;
block = new dim3(256, 4);
grid = new dim3(Frame.width …Run Code Online (Sandbox Code Playgroud) 我有一些用于时间排序算法的代码(用于学校),但每当数组大小大于 20k 时,它就会不断崩溃。
这是我的主要文件:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "sorting.h"
#define ARG_COUNT 1
int main(int argc, char *argv[]) {
if (argc != ARG_COUNT + 1) {
printf("Too few or too many arguments passed.\n");
exit(1);
}
if (atoi(argv[1]) < 10000) {
printf("Array lenght should be at least 10 000.");
exit(2);
}
int arr_lenght = atoi(argv[1]);
srand(time(0));
int *arr1 = (int *)calloc(arr_lenght, arr_lenght * sizeof(int));
for (int i = 0; i < arr_lenght; i++) {
arr1[i] = rand() % 20; …Run Code Online (Sandbox Code Playgroud) 看看这个:http://novarose.co.cc/web2/
淡化效果有点混乱,我不知道如何使其正常工作.
我希望代码按以下顺序运行:
我对该页面的jQuery代码:
$('#navigation a').click(function(){$ .get("page.php",{page:$(this).attr('id')},function(data){$('# content').fadeOut('slow').html(data).fadeIn('slow');});});
假设有一个函数x()可以做一些动画
如果我循环x(),说100次需要<1ms(平均/调用)来执行它但是,如果我这样做setInterval(x, 100),平均需要> 150ms才能执行
由于这种怪癖,我的动画很不稳定.(我的for-loop测试的原因是确保x()不是瓶颈)
是否有任何技术/模式可以确保我的计时器以同一时间和给定间隔被激发(以低间隔)并且不受浏览器的支配?
更新:为什么以下内容会针对不同的时间间隔给出不同的结果
http://jsfiddle.net/zQQgH/7/
更新2:感谢lincolnk,我已经为任何人更新了代码以查看它 http://jsfiddle.net/zQQgH/22/
我想在eclipse中运行我的程序,但我想看看运行程序需要多长时间.换句话说,我想计算我的计划时间.我知道在UNIX中我可以通过在命令行上的命令之前放置单词"time"来计时任何操作.但我不知道如何能够在Eclipse中操作我的操作.为了使一切更清晰,我想避免编写新方法.有没有办法可以添加到我的配置路径?有谁知道我怎么能这样做?
嗨!
我正在使用GCD构建一个计时器,以便以特定的间隔播放声音,更准确地说,它是一个节拍器声音.我一直在努力解决我的问题,但没有.一切都很好但是当我把我的节奏设置为更大的值时,让我们说150 bpm或200 bpm,当声音第一次开始时,它会很快发射(几乎像两个声音在同一时间意味着它没有预期间隔)并在此之后,它进行校准.我第二次启动声音,一切都很好......所以这只发生在我第一次恢复调度源时所以我猜它与从磁盘加载声音有关,就像在这篇帖子中一样:慢第一次播放声音时启动AVAudioPlayer.对于我的声音我在第一次的实例中使用AVAudioPlayer与prepareToPlay并且play还在AppDelegate类中创建它,它还没有工作......我甚至尝试过@NickLockwood开发的SoundManager类,同样的问题.目前,我正在使用SystemSoundID.至于计时器,这是我的第一个GCD计时器,我已经尝试了经典的NSTimer,CADisplayLink以及在git上找到的其他计时器...都是徒劳的.
另一个有趣的问题是,与其他计时器一样,在模拟器上一切都很完美,但在设备上却出现了同样的故障.
这是代码,我希望有人能把我带到光明之中.
-(void)playButtonAction //
{
if (_metronomeIsAnimatingAndPLaying == NO)
{
[self startAnimatingArm]; // I start my animation and create my timer
metronomeTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
dispatch_source_set_timer(metronomeTimer,dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC),duration * NSEC_PER_SEC,duration *NSEC_PER_SEC);
dispatch_source_set_event_handler(metronomeTimer, ^{[self playTick];});
dispatch_resume(metronomeTimer);
_metronomeIsAnimatingAndPLaying = YES;
}
}
-(void)playTick
{
AudioServicesPlaySystemSound(appDeleg.soundID); // soundID is created in appDelegate
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序didFinishLaunching
NSString *path = [[NSBundle mainBundle] pathForResource:@"tick"
ofType:@"caf"]; …Run Code Online (Sandbox Code Playgroud) 我不是在谈论吸血蜘蛛般的疾病传播者,而是我在这里记录的那种滴答:
Stopwatch noLyme = new Stopwatch();
noLyme.Start();
. . .
noLyme.Stop();
MessageBox.Show(string.Format(
"elapsed milliseconds == {0}, elapsed ticks == {1}",
noLyme.ElapsedMilliseconds, noLyme.ElapsedTicks));
Run Code Online (Sandbox Code Playgroud)
消息框显示的是17357毫秒和56411802滴答; 这相当于每毫秒3250.089416373797个刻度,或每秒约325万个刻度.
由于比率是如此奇怪(3250.089416373797:1),我假设刻度的时间长度根据使用的硬件或其他因素而变化.既然如此,实际使用的是滴答计数?对我来说,似乎毫秒有更多的价值.IOW:为什么我会关心滴答声(可变时间片)?
这是我的游戏循环代码:
while (shouldUpdate)
{
timeSinceLastUpdate = 0;
startTime = clock();
while (timeAccumulator >= timeDelta)
{
listener.handle();
em.update();
timeAccumulator -= timeDelta;
timeSinceLastUpdate += timeDelta;
}
rm.beginRender();
_x->draw();
rm.endRender();
timeAccumulator += clock() - startTime;
}
Run Code Online (Sandbox Code Playgroud)
它几乎完美地运行,但它有一些抖动,每秒几次而不是_x(一个测试实体,它在更新中所做的全部是x ++)向右移动1个像素,它实际上向右移动2个像素这是一个明显的滞后/抖动效应.我猜时钟()不够准确.那么我该怎么做才能改善这个游戏循环呢?
如果重要,我使用SDL和SDL_image.
编辑:做一些比时钟更精确的事情没有任何改变.但是,我已经想到的是,这一切都归功于timeDelta.这就是我发这篇文章时timeDelta的定义方式:
double timeDelta = 1000/60;
Run Code Online (Sandbox Code Playgroud)
但当我把它定义为别的东西时,却一直在搞乱......
double timeDelta = 16.666666;
Run Code Online (Sandbox Code Playgroud)
我注意到比赛开始的前几秒,它像黄油一样光滑.但就在几秒钟之后,游戏结结巴巴,然后又恢复了平稳,并重复了这样.我添加了更多的6(或真正的)之后的任何东西,游戏最初平滑的时间越长,并且它的延迟越大.似乎浮动错误正在攻击.那我该怎么办呢?
编辑2:我已经尝试了很多东西,现在它甚至都不好笑......有人可以帮助我完成循环的数学部分吗?既然这就是造成这种情况的原因......
EDIT3:我给一些人发了一个测试程序,有人说它非常顺利,有些人说它像我描述的那样紧张.对于愿意在这里测试它的人来说,它是(src):https://www.mediafire.com/?vfpy4phkdj97q9j
EDIT4:我改变了源代码的链接.
我正在尝试测量在Python中运行一组指令所需的时间,但我不想写下这样的内容:
start = time.clock()
...
<lines of code>
...
time_elapsed = time.clock() - start
Run Code Online (Sandbox Code Playgroud)
相反,我想知道是否有一种方法可以将指令块作为参数发送给返回已用时间的函数,如
time_elapsed = time_it_takes(<lines of code>)
Run Code Online (Sandbox Code Playgroud)
这种方法的实现可能是这样的
def time_it_takes(<lines of code>):
start = time.clock()
result = <lines of code>
return (result, time.clock() - start)
Run Code Online (Sandbox Code Playgroud)
有人知道我能否做到这一点?提前致谢.