
不管如何,实现毫秒级的精度需要使用硬件定时器中断--无论tickGet或者是timestamp都(从实现角度上来说最终)是这样。至于这个时间精不精确,则要看你的需求了,但这个精确度与如下因素有关:1 时钟频率的准确性。比如x86,8254定时器使用的是一个独立的晶振。其它系统嵌入式处理器,cpu内部通常包含了定时器,定时器的晶振就是CPU的晶振。2 VxWorks的中断响应时间:比较小,通常在5us左右(不能一概而论,这个与硬件性能相关度很大)。不过,如果我们认为晶振频率一直稳定,精确的话,这个定时顶多受中断响应时间的影响,又或者是中断嵌套的影响(也就是若干个us,当然条件是你把需要处理的内容放在ISR中而不是需要调度的任务中,如果挂在主时钟上,就没有中断嵌套的影响了,因为它的优先级是最高的),而且不会产生累计误差。就实现方式上来讲,挂主时钟还是辅助时钟,还是timestamp时钟。就看你的需要了:),必要的情况下,直接自己挂中断服务程序,这样最精确了。呵呵。
#include <iostream>
#include <windowsh>
using namespace std;
void main()
{
SYSTEMTIME time;//时间结构声明,这个结构是系统的,
GetSystemTime( &time ); //调用获取系统时间api
//GetLocalTime();这个函数是获取本地时间api
char t_y;
char t_m;
char t_h;
char t_Min;
char t_s;
char t_Mi;
char t_d;
char t_w;
SYSTEMTIME time;//时间结构声明,这个结构是系统的,
GetSystemTime( &time );//调用获取系统时间api
sprintf(t_y, "%d", timewYear);//将年份格式输出到t_y变量中
sprintf(t_m, "%d", timewMonth);
sprintf(t_w, "%d", timewDayOfWeek);
sprintf(t_d, "%d", timewDay);
sprintf(t_h, "%d", timewHour);
sprintf(t_Min, "%d", timewMinute);
sprintf(t_s, "%d", timewSecond);
sprintf(t_Mi, "%d", timewMilliseconds);
printf("%s,%s,%s,%s,%s,%s,%s,%s",
timewYear,
timewMonth,
timewDayOfWeek,
timewDay,
timewHour,
timewMinute,
timewSecond,
timewMilliseconds);
}
/
SYSTEM结构成员如下:
SYSTEMTIME STRUCT
{
WORD wYear ; 年
WORD wMonth ;月
WORD wDayOfWeek ;星期,0=星期日,1=星期一
WORD wDay ;日
WORD wHour ;时
WORD wMinute ;分
WORD wSecond ;秒
WORD wMilliseconds ;毫秒
}SYSTEMTIME ENDS
///
use Time::HiRes qw( gettimeofday );
my ($seconds, $microseconds) = gettimeofday;
秒 , 微秒, 计算一下就是毫秒了, perl模块中有不少与linux函数同名同功能的函数都可以直接用的,主要搜一下在哪个模块中,在perl的模块代码中搜,或者查看perldoc去查
$ touch 1log; stat --print="%y\n" 1log
2016-04-08 18:31:02621677365 +0800
运行命令touch <文件名>; stat --print="%y\n" <文件名>
文件名可以任意写,就可以得到执行命令那一刹那的时刻。例如,上面的结果是, 18点31分零2621677365秒。
后面的 +0800 是说计算机为北京时间(北京时间比格林威治时间早8小时 )
供参考,谢谢!
北京时间校准
国家授时中心标准北京时间
16:13:56:925
2022-09-07 星期三
您的设备时间:2022-09-7 16:14:38
北京时间在线校准系统提供标准北京时间校准,可以将北京时间校准到毫秒级。 为保证时间的准确性,本页面每五分钟与计时中心的标准时间同步一次。
_ 刷新时间:从服务器获取最新时间。 长时间运行后,需要刷新时间;
_ 您的网速也会影响时间的准确性,一般在半秒以内;
1
long javautilDategetTime()
Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
represented by this Date object
如上JDK文档说,在Date对象上用getTime()获得自1970年1月1日以来的毫秒数。
2
SystemcurrentTimeMillis(); 这个方法获取当前时间的毫秒数。
3
以下实例代码把通过毫秒数相减算的目前距2014-10-01 00:00:00的天数。
public class Test {public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String start="2014-10-01 00:00:00";
//得到毫秒数
long timeStart=sdfparse(start)getTime();
long justNow =SystemcurrentTimeMillis();
//两个日期想减得到天数
long dayCount= (justNow-timeStart)/(2436001000);
Systemoutprintln(dayCount);
}
}
输出
25
先申明下,这个是我转百度知道的,经常BAIDU一下,就OK了
#include <stdioh>
#include <timeh>
void main ()
{
time_t rawtime;
struct tm timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "\007The current date/time is: %s", asctime (timeinfo) );
exit(0);
}
=================
#include <timeh> -- 必须的时间函数头文件
time_t -- 时间类型(timeh 定义)
struct tm -- 时间结构,timeh 定义如下:
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
time ( &rawtime ); -- 获取时间,以秒计,从1970年1月一日起算,存于rawtime
localtime ( &rawtime ); -- 转为当地时间,tm 时间结构
asctime ()-- 转为标准ASCII时间格式:
星期 月 日 时:分:秒 年
=========================================
你要的格式可这样输出:
printf ( "%4d-%02d-%02d %02d:%02d:%02d\n",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,
timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
就是直接打印tm,tm_year 从1900年计算,所以要加1900,
月tm_mon,从0计算,所以要加1
其它你一目了然啦。
以上就是关于vxwoks如何获得毫秒级时间问题全部的内容,包括:vxwoks如何获得毫秒级时间问题、求C++获取系统时间源代码,精确到毫秒、如何在perl里取得毫秒级的时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)