Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MSVC 2008更好的时机?_C++_C_Windows_Timer_Interrupt - Fatal编程技术网

C++ MSVC 2008更好的时机?

C++ MSVC 2008更好的时机?,c++,c,windows,timer,interrupt,C++,C,Windows,Timer,Interrupt,我目前正在从事的项目使用MSVC 2008,在这方面我没有任何选择 在其上使用的操作系统与Windows 10一样新。我试图在应用程序中引入更精确的计时,但是到目前为止,我在网上做的大部分搜索都导致了一个死胡同,是的,MSVC的新版本确实支持更精确的计时,但我没有这些 有没有办法提高计时的分辨率,不仅仅是分辨率,还有精确度 我曾在其他操作系统上使用和工作过,比如QNX,在那里很可能使用纳秒精度的计时器,而这是在旧得多的硬件上 福吉:现在我想把两个程序的结果结合起来,调用: GetLoca

我目前正在从事的项目使用MSVC 2008,在这方面我没有任何选择

在其上使用的操作系统与Windows 10一样新。我试图在应用程序中引入更精确的计时,但是到目前为止,我在网上做的大部分搜索都导致了一个死胡同,是的,MSVC的新版本确实支持更精确的计时,但我没有这些

有没有办法提高计时的分辨率,不仅仅是分辨率,还有精确度

我曾在其他操作系统上使用和工作过,比如QNX,在那里很可能使用纳秒精度的计时器,而这是在旧得多的硬件上

福吉:现在我想把两个程序的结果结合起来,调用:

    GetLocalTime
要返回大量数据,请使用年、月、日、小时、分钟和秒,然后使用:

    QueryPerformanceFrequency
    QueryPerformanceCounter

为了获得和计算微秒部分,并屏蔽大于一秒的任何内容,我将小数部分保留为微秒。

这是我的解决方案,我已经测试过,结果很好:

    LARGE_INTEGER liFreq, liNow;
    SYSTEMTIME sstNow;       
    char szMsg[768];
    long lngMicro;
    /*Get high performance frequency and counter*/
    QueryPerformanceFrequency(&liFreq);
    QueryPerformanceCounter(&liNow);
    /*Work out elapsed microseconds using frequency*/
    liNow.QuadPart *= 1000000;
    liNow.QuadPart /= liFreq.QuadPart;
    /*Mask out everything >= 1 second */
    lngMicro = liNow.QuadPart % 1000000;
    /*Get the system date and time*/
    GetLocalTime(&sstNow);
    /*Build up formatted debug string including sequence number, line number
     *date and time stamp including microseconds and message detail*/
    sprintf_s(szMsg, sizeof(szMsg)
         ,"%4d-%02d-%02d %02d:%02d:%02d.%06ld DBG:%-24sL%05uSQ%05uET%16.6f%s%s\n"            
         ,sstNow.wYear, sstNow.wMonth, sstNow.wDay
         ,sstNow.wHour, sstNow.wMinute, sstNow.wSecond
         ,lngMicro, cpszClipped, uintLineNo
         ,suintDbgSeqNo, dblElapsed, sszIndents, cpszFormat);
这不是全部功能,但希望能为任何人提供足够的信息,让他们了解发生了什么以及它是如何工作的。下面是使用此技术生成的日志文件的一个片段:

    2018-05-16 08:17:52.334189 DBG:FsLonSource.cpp         L01079SQ00011ET        5.334189   CFsLonSource::SubmitCommand(AddressType:Local NI, Mode:0, Selector:0)
    2018-05-16 08:17:52.334449 DBG:NodetalkLONInterface.c  L01862SQ00012ET        5.334449     AdapterSetAddress(DomainId:, SubnetId:1, NodeId:1)
    2018-05-16 08:17:52.334807 DBG:NodetalkLONInterface.c  L01522SQ00013ET        5.334807       AdapterSetAddressInternal(DomainId:, SubnetId:1, NodeId:1)
    2018-05-16 08:17:52.335413 DBG:NodetalkLONInterface.c  L01021SQ00014ET        5.335413         NodeSetAddress(ServiceType: ACKD): ok
    2018-05-16 08:17:52.335603 DBG:NodetalkLONInterface.c  L01055SQ00015ET        5.335603         NodeSetModeState()
    2018-05-16 08:17:52.335783 DBG:NodetalkLONInterface.c  L01064SQ00016ET        5.335783           ServiceType: UNACKD
    2018-05-16 08:17:52.335966 DBG:NodetalkLONInterface.c  L01065SQ00017ET        5.335966           NewMode: ?
    2018-05-16 08:17:52.336124 DBG:NodetalkLONInterface.c  L01071SQ00018ET        5.336124           NewState: Configured, Online
    2018-05-16 08:17:52.339081 DBG:FsLonDispatch.cpp       L00342SQ00019ET        5.339081           CFsLonDispatch::ExecRequest(): S_OK
    2018-05-16 08:17:52.433098 DBG:FsLonDispatch.cpp       L00181SQ00020ET        5.433098         CFsLonDispatch::ExecRequest(request:"<UpdateRest xmln", lTimeout:0, destination:"", correlationId:"")
    2018-05-16 08:17:52.436138 DBG:FsLonDispatch.cpp       L00250SQ00021ET        5.436138           strCCommand: UpdateRest
    2018-05-16 08:17:52.436431 DBG:FsLonDispatch.cpp       L00342SQ00022ET        5.436431           CFsLonDispatch::ExecRequest(): S_OK
    2018-05-16 08:17:52.437184 DBG:FsLonDispatch.cpp       L00181SQ00023ET        5.437184         CFsLonDispatch::ExecRequest(request:"<UpdateRest xmln", lTimeout:0, destination:"", correlationId:"")
    2018-05-16 08:17:52.439981 DBG:FsLonDispatch.cpp       L00250SQ00024ET        5.439981           strCCommand: UpdateRest
    2018-05-16 08:17:52.440331 DBG:FsLonDispatch.cpp       L00342SQ00025ET        5.440331           CFsLonDispatch::ExecRequest(): S_OK
    2018-05-16 08:17:52.440705 DBG:FsLonDispatch.cpp       L00181SQ00026ET        5.440705         CFsLonDispatch::ExecRequest(request:"<UpdateRest xmln", lTimeout:0, destination:"", correlationId:"")
    2018-05-16 08:17:52.443586 DBG:FsLonDispatch.cpp       L00250SQ00027ET        5.443586           strCCommand: UpdateRest
    2018-05-16 08:17:52.443792 DBG:FsLonDispatch.cpp       L00342SQ00028ET        5.443792           CFsLonDispatch::ExecRequest(): S_OK
    2018-05-16 08:17:52.951870 DBG:NodetalkLONInterface.c  L01108SQ00029ET        5.951870         ServiceType: REQUEST
    2018-05-16 08:17:52.955944 DBG:NodetalkLONInterface.c  L01152SQ00030ET        5.955944         NodeSetModeState(): ok
    2018-05-16 08:17:52.956289 DBG:NodetalkLONInterface.c  L01555SQ00031ET        5.956289       AdapterSetAddressInternal(): ok
    2018-05-16 08:17:52.956655 DBG:NodetalkLONInterface.c  L01597SQ00032ET        5.956655     AdapterSetRcvTimer(ServiceType: REQUEST, AddressType: LOCAL)
    2018-05-16 08:17:52.966897 DBG:NodetalkLONInterface.c  L01625SQ00033ET        5.966897       AdapterSetRcvTimer(): ok
    2018-05-16 08:17:52.967216 DBG:NodetalkLONInterface.c  L01878SQ00034ET        5.967216     AdapterSetAddress(): ok
    2018-05-16 08:17:52.967531 DBG:FsLonSource.cpp         L01174SQ00035ET        5.967531   CFsLonSource::SubmitCommand(): ok
2018-05-16 08:17:52.334189 DBG:FsLonSource.cpp L01079SQ00011ET 5.334189 CFsLonSource::SubmitCommand(地址类型:本地NI,模式:0,选择器:0)
2018-05-16 08:17:52.334449 DBG:NodeTalkOnInterface.c L01862SQ00012ET 5.334449适配器地址(域ID:,子网ID:1,节点ID:1)
2018-05-16 08:17:52.334807 DBG:NodeTalkOnInterface.c L01522SQ00013ET 5.334807 AdapterSetAddressInternal(域ID:,子网ID:1,节点ID:1)
2018-05-16 08:17:52.335413 DBG:NodeTalkOnInterface.c L01021SQ00014ET 5.335413节点地址(服务类型:ACKD):正常
2018-05-16 08:17:52.335603 DBG:NodeTalkOnInterface.c L01055SQ00015ET 5.335603 NodeSetModeState()
2018-05-16 08:17:52.335783 DBG:NodeTalkOnInterface.c L01064SQ00016ET 5.335783服务类型:未确认
2018-05-16 08:17:52.335966 DBG:NodeTalkOnInterface.c L01065SQ00017ET 5.335966新模式:?
2018-05-16 08:17:52.336124 DBG:NodeTalkOnInterface.c L01071SQ00018ET 5.336124新闻状态:已配置,在线
2018-05-16 08:17:52.339081 DBG:FsLonDispatch.cpp L00342SQ00019ET 5.339081 CFsLonDispatch::ExecRequest():S_OK

2018-05-16 08:17:52.433098 DBG:FsLonDispatch.cpp L00181SQ00020ET 5.433098 CFsLonDispatch::ExecRequest(请求:"这就是你要找的:@xxbbcc,看起来很有希望,谢谢,我会看一看。这是windows上计时的最终参考。@splaten对于windows 8+,
getsystemtimeprecisesfiletime
then
FileTimeToSystemTime
。对于windows 7,如果你需要真正准确的时间,如果你不介意的话,请降低它的群集错误s准确性您可以使用
GetSystemTimeAsFiletime
。这篇链接文章涵盖了所有内容。@MikeVine您在发表一些评论,如果这些评论是答案,我会投赞成票。如果您发布,请告诉我。您不能从其他来源获取秒和微秒。它们不一定是同步的或同相的。同步与否并不重要这只是一个按时间顺序排列的参考,它可以工作。我想知道它会如何看待到下一秒的过渡…(这里显示的输出中缺少这一点)