相关疑难解决方法(0)

如何使用ANSI C测量时间(以毫秒为单位)?

仅使用ANSI C,有没有办法以毫秒或更多精度测量时间?我正在浏览time.h但我只发现了第二个精确功能.

c portability time-precision

118
推荐指数
6
解决办法
21万
查看次数

定时器功能使用C++以纳秒为单位提供时间

我希望计算API返回值所花费的时间.这种行动所花费的时间是纳秒秒.由于API是C++类/函数,我使用timer.h来计算相同的:

  #include <ctime>
  #include <cstdio>

  using namespace std;

  int main(int argc, char** argv) {

      clock_t start;
      double diff;
      start = clock();
      diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC;
      cout<<"printf: "<< diff <<'\n';

      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了以秒为单位的时间.如何在毫秒秒内获得相同的精度?

c c++ timer

101
推荐指数
8
解决办法
20万
查看次数

OSX上的单调时钟

CLOCK_MONOTONIC似乎不可用,所以clock_gettime已经用完了.

我在某些地方读过,mach_absolute_time()可能是正确的方法,但在阅读之后它是一个'cpu依赖值',它立即让我想知道它是否在下面使用rtdsc.因此,即使它是单调的,该值也可能随时间漂移.此外,线程关联性问题可能会导致调用函数产生有意义的不同结果(使其在所有内核中不是单调的).

当然,这只是猜测.有谁知道mach_absolute_time实际上是如何工作的?我实际上正在寻找clock_gettime的替代品(CL​​OCK_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

谢谢!布雷特

macos posix timing objective-c clock

22
推荐指数
2
解决办法
1万
查看次数

是否有任何表现良好的POSIX间隔定时器?

受到最后一个闰秒的启发,我一直在探索使用POSIX调用的计时(特别是间隔计时器).

POSIX提供了几种设置计时器的方法,但它们都有问题:

  • sleep并且nanosleep这些在被信号中断后重新启动很烦人,并引入了时钟偏差.您可以通过一些额外的工作来避免一些但不是全部的这种偏差,但这些功能使用实时时钟,所以这并非没有陷阱.
  • setitimer或者更现代的timer_settime这些被设计为间隔计时器,但它们是每个进程,如果您需要多个活动计时器,这是一个问题.它们也不能同步使用,但这不是什么大问题.
  • clock_gettime并且clock_nanosleep在使用时看起来像是正确的答案CLOCK_MONOTONIC.clock_nanosleep支持绝对超时,因此您可以只是睡眠,增加超时,然后重复.在中断之后也很容易重启.不幸的是,这些功能可能也是特定于Linux的:在Mac OS X或FreeBSD上不支持它们.
  • pthread_cond_timedwait可以在Mac上使用,可以gettimeofday作为一个kludgy解决方案,但在Mac上它只能与实时时钟一起使用,因此当系统时钟设置或闰秒发生时,它会受到不当行为的影响.

我缺少一个API吗?是否有一种合理的可移植方式在类UNIX系统上创建性能良好的间隔定时器,或者这总结了今天的状态?

通过良好的行为和合理的便携性,我的意思是:

  • 不容易出现时钟偏差(当然,减去系统时钟自身的偏差)
  • 适应正在设置的系统时钟或发生闰秒
  • 能够在同一个过程中支持多个计时器
  • 至少可在Linux,Mac OS X和FreeBSD上使用

关于闰秒的注释(响应R ..的回答):

POSIX天的长度恰好是86,400秒,但现实世界的日子很少会更长或更短.系统如何解决这种差异是由实现定义的,但闰秒通常与前一秒共享相同的UNIX时间戳.另请参见:闰秒以及如何处理它们.

Linux内核闰第二个错误是在将时钟设置为秒后无法进行内务处理的结果:https://lkml.org/lkml/2012/7/1/203.即使没有那个错误,时钟也会向后跳一秒钟.

c posix timer

18
推荐指数
2
解决办法
1万
查看次数

c timeval vs timespec

除了精度的差异,struct timeval和之间有什么区别struct timespec?如果我需要的精度低于μs(比如毫秒),为什么我要使用一个而不是另一个?

在我的编译器(ARM的gcc)上:

/* POSIX.1b structure for a time value.  This is like a `struct timeval' but
   has nanoseconds instead of microseconds.  */
struct timespec
  {
    __time_t tv_sec;        /* Seconds.  */
    __syscall_slong_t tv_nsec;  /* Nanoseconds.  */
  };

/* A time value that is accurate to the nearest
   microsecond but also has a range of years.  */
struct timeval
  {
    __time_t tv_sec;        /* Seconds.  */
    __suseconds_t tv_usec;  /* Microseconds.  */
  };
Run Code Online (Sandbox Code Playgroud)

随着双方__syscall_slong_t__suseconds_t定义为"长字".

c linux time

11
推荐指数
1
解决办法
2万
查看次数

C中目前的微秒时间?

如何在Unix平台上用C打印当前的微秒时间?

c unix time

8
推荐指数
3
解决办法
1万
查看次数

如何构建需要clock_gettime函数的Linux/OSX makefile

当我尝试在Linux中构建项目时,我得到了Error: undefined symbol clock_gettime.所以我想出了我需要添加-lrt到构建命令(gcc).但是,现在它不会在OS X中编译:ld: library not found for -lrt.我不知道这个函数究竟在哪里被调用,因为它在静态链接代码中,但它似乎在没有librt的OS X中工作得很好.链接的代码可能使用了替代#if __APPLE__或替代.

是否有任何方法可以指示gcclibrt在需要时链接,或者是否存在?如果没有,如何使用特定于操作系统的命令创建Makefile?我没有使用autoconf或类似的东西.

Makefile相当复杂,但这里是操作部分:

CC := g++
# In this line, remove -lrt to compile on OS X
LFLAGS := -lpthread -lrt
CFLAGS := -c -Wall -Iboost_build -Ilibtorrent_build/include -Iinc
OBJDIR := obj
SRCDIR := src
SRC := $(wildcard $(SRCDIR)/*.cpp)
OBJS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRC))

# Note that libtorrent is built with a modified jamfile to place the
# libtorrent.a …
Run Code Online (Sandbox Code Playgroud)

gcc makefile

5
推荐指数
1
解决办法
4763
查看次数

Linux和OS X上的C语言中的ns精度单调时钟

clock_gettime(CLOCK_MONOTONIC, ...) 可用于Linux而不是OS X.Mach计时器可在OS X中使用,但在Linux中不可用.

如何在C中获得ns精度单调时钟,这在Linux和OS X上都有效?

c linux macos time

4
推荐指数
1
解决办法
2665
查看次数

标签 统计

c ×6

time ×3

linux ×2

macos ×2

posix ×2

timer ×2

c++ ×1

clock ×1

gcc ×1

makefile ×1

objective-c ×1

portability ×1

time-precision ×1

timing ×1

unix ×1