easyX中如何安卓开发添加计时时功能?

帮忙把程序添加个背景音乐?【easyx吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:8,463贴子:
帮忙把程序添加个背景音乐?收藏
#include &graphics.h&#include &conio.h&#include &time.h&#include &stdio.h&#pragma comment(lib,&winmm.lib&)// 定义常量#define NUM 10#defineCMD_LEFT1#defineCMD_RIGHT2#defineCMD_QUIT4int box_x = 10;int box_y = 420;void welcome(){
mciSendString(_T(&play res\\music\\music01.mp3 repeat&), NULL, 0, NULL); // 输出屏幕提示cleardevice();IMAGE
//定义IMAGE对象 loadimage(&img, &Z:\\开始背景图.jpg&);
// 读取图片到 img 对象中 putimage(0, 0, &img);
//在坐标 (0, 0) 位置显示 IMAGE 对象setcolor(YELLOW);setfont(64, 0, &黑体&);outtextxy(100, 50, &接人参果小游戏&);setcolor(RED);setfont(16, 0, &楷书&);outtextxy(100, 200, &就是很传统的那个掉字母然后按相应键就消失的游戏&);outtextxy(100, 240, &只是做了一个简单的实现&);outtextxy(100, 280, &功能并不很完善,比如生命数、分数等都没有写&);outtextxy(100, 320, &感兴趣的自己加进去吧&);// 实现闪烁的&按任意键继续&int c=255;while(!kbhit()){setcolor(RGB(c, 0, 0));outtextxy(280, 400, &按任意键继续&);c -= 8;if (c & 0) c = 255;Sleep(20);}getch();cleardevice();}// 退出界面void goodbye(){cleardevice();IMAGE RG_BK;loadimage(&RG_BK,_T(&C:\\RunGame_BK.jpg&),640,480,true);putimage(0,0,&RG_BK);setcolor(YELLOW);setfont(48, 0, &黑体&);outtextxy(104, 180, &应用五班
十三小组&);getch();}void wrong(){cleardevice();IMAGE RG_BK;loadimage(&RG_BK,_T(&C:\\RunGame_BK.jpg&),true);putimage(0,0,&RG_BK);setcolor(YELLOW);setfont(48, 0, &黑体&);outtextxy(200, 180, &游戏结束&);getch();}// 定义球的结构体struct Ball{int x, y,};// 获取用户控制int GetCommand(){int c = 0;if (GetAsyncKeyState(VK_LEFT) & 0x8000)c |= CMD_LEFT;if (GetAsyncKeyState(VK_RIGHT) & 0x8000)c |= CMD_RIGHT;if (GetAsyncKeyState(VK_ESCAPE) & 0x8000)c |= CMD_QUIT;}// 倒计时int Time(int t){char strsec[10];int sec = 30 - (GetTickCount() - t) / 1000;itoa(sec, strsec, 10);outtextxy(570, 110, &
&);outtextxy(570, 110, strcat(strsec, &s&));}// 介绍void menu(){line(449, 0, 449, 480);char runTime[] = &游戏倒计时
receiveBallNum[] = &接到的球的数量:&, copyRight[] = &版权所有:应用五班十三小组&, finishWorkDate[] = &完成日期:日&,
introductiona[] = &按方向键控制盒子移动接住&, introductionb[] = &小球,倒计时为0时游戏结束&;settextcolor(GREEN);outtextxy(450, 10, introductiona);outtextxy(450, 30, introductionb);outtextxy(450, 110, runTime);outtextxy(450, 210, receiveBallNum);outtextxy(450, 310, copyRight);outtextxy(450, 410, finishWorkDate);}// 产生随机球void ballRandom(Ball ball[], int i){ball[i].x = 16 + 45 * ball[i].y = 8 + rand() % 32;ball[i].v = 1 + rand() % 5;}// 画球,并计算得分void calculateScore(Ball ball[], int &score){for(int i = 0; i & NUM; i++){fillcircle(ball[i].x, ball[i].y, 10);IMAGE
loadimage(&img, &Z:\\人参果1.jpg&);
putimage(ball[i].x-10, ball[i].y-10, &img); if(ball[i].y &= 472){ballRandom(ball, i);}if(box_x + 8 &= ball[i].x && ball[i].x &= box_x + 72 && ball[i].y &= 412){score++;ballRandom(ball, i);}}}// 主函数int main(){// 初始化initgraph(640, 480);welcome();srand(time(NULL));BeginBatchDraw();setlinecolor(GREEN);setfillcolor(WHITE);menu();Ball ball[NUM];int dx, i, c, score = 0;bool flag =for(i=0; i# i++){ballRandom(ball, i);}int t = GetTickCount();char strScore[10], str[] = &your score:&;// 游戏主循环while(flag){dx = 0;// 显示得分char strScore[10];itoa(score, strScore, 10);outtextxy(570, 210, strScore);IMAGE{ IMAGE
//定义IMAGE对象 loadimage(&img, &z:\\人参树1.jpg&);
// 读取图片到 img 对象中 putimage(0,0, &img); }putimage(0,0, &img);// 画球,并计算得分calculateScore(ball, score);// 画盒子fillrectangle(box_x, box_y, box_x+80, box_y+60);{IMAGEloadimage(&img, &Z:\\悟空1.jpg&);putimage(box_x, box_y, &img);} FlushBatchDraw();// 获取用户控制命令c = GetCommand();if (c & CMD_LEFT)dx = -10;if (c & CMD_RIGHT)dx = 10;if (c & CMD_QUIT)flag =if (!Time(t)) flag =// 延时Sleep(25);// 擦除游戏区clearrectangle(0, 0, 448, 480);// 计算球的新坐标for(i = 0; i & NUM; i++){ball[i].y += ball[i].v;}// 移动盒子box_x +=if(box_x & 0)
box_x = 0;if(box_x & 368) box_x = 368;}// 清空键盘缓冲区FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));// 输出游戏结果itoa(score, strScore, 10);outtextxy(222, 240, strcat(str, strScore));outtextxy(220, 300, &按任意键退出&);EndBatchDraw();
goodbye();// 按任意键退出getch();closegraph();return 0;}
easyx的官网上有相关的教程。
登录百度帐号vs2017的图形库怎么安装啊,用c++想初始化一个图形界面,以前用vs2013 装的是easyx的图形库,现在用2017不知道怎么办啊
[问题点数:40分]
本版专家分:0
CSDN今日推荐
匿名用户不能发表回复!|
其他相关推荐基于EasyX库的c++图形化游戏的功能扩展
在C++的语言环境下,图形化界面往往要安装很复杂的图形化插件再进行编写,而EasyX则是利用了一个库所包含的各种函数变量等,做到了C++下的图形化编程。
以下是原始代码,代码实现了一个简单地图形化盒子接小球的游戏
// 定义常量
#define NUM 10
#define CMD_LEFT 1
#define CMD_RIGHT 2
#define CMD_QUIT 4
int box_x = 10;
int box_y = 420;
// 定义球的结构体
struct Ball
// 获取用户控制
int GetCommand()
int c = 0;
if (GetAsyncKeyState(VK_LEFT) & 0x8000) c |=
if (GetAsyncKeyState(VK_RIGHT) & 0x8000) c |=
CMD_RIGHT;
if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) c |=
int Time(int t)
char strsec[10];
int sec = 20 - (GetTickCount() - t) / 1000;
itoa(sec, strsec, 10);
outtextxy(570, 110, " & &
outtextxy(570, 110, strcat(strsec, "s"));
void menu()
line(449, 0, 449, 480);
char runTime[] = "游戏倒计时 & &
introductiona[] = "按方向键控制盒子移动接住", introductionb[] =
"小球,倒计时为0时游戏结束";
settextcolor(GREEN);
outtextxy(450, 10, introductiona);
outtextxy(450, 30, introductionb);
outtextxy(450, 110, runTime);
// 产生随机球
void ballRandom(Ball ball[], int i)
ball[i].x = 16 + 45 *&
ball[i].y = 8 + rand() % 32;
ball[i].v = 1 + rand() % 5;
// 画球,并计算得分
void calculateScore(Ball ball[])
for(int i = 0; i & NUM; i++)
fillcircle(ball[i].x, ball[i].y, 8);
if(ball[i].y &= 472)
ballRandom(ball, i);
if(box_x + 8 &= ball[i].x && ball[i].x &= box_x
+ 72 && ball[i].y &= 412)
ballRandom(ball, i);
int main()
initgraph(640, 480);
srand(time(NULL));
BeginBatchDraw();
setlinecolor(GREEN);
setfillcolor(WHITE);
Ball ball[NUM];
int dx, i, c, score = 0;
bool flag =
for(i=0; i
ballRandom(ball, i);
int t = GetTickCount();
// 游戏主循环
while(flag)
// 画球,并计算得分
calculateScore(ball);
fillrectangle(box_x, box_y, box_x+80, box_y+60);
FlushBatchDraw();
// 获取用户控制命令
c = GetCommand();
if (c & CMD_LEFT) dx = -10;
if (c & CMD_RIGHT) dx = 10;
if (c & CMD_QUIT) flag =
if (!Time(t)) flag =
Sleep(25);
// 擦除游戏区
clearrectangle(0, 0, 448, 480);
// 计算球的新坐标
for(i = 0; i & NUM; i++)
ball[i].y += ball[i].v;
// 移动盒子
if(box_x & 0) & box_x = 0;
if(box_x & 368) box_x = 368;
// 清空键盘缓冲区
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
// 输出游戏结果
outtextxy(220, 300, "按任意键退出");
EndBatchDraw();
// 按任意键退出
closegraph();
以下为更改之前的截图:
以下是更改后的代码,增加了计分功能。
// 定义常量
#define NUM 10
#define CMD_LEFT 1
#define CMD_RIGHT 2
#define CMD_QUIT 4
int box_x = 10;
int box_y = 420;
// 定义球的结构体
struct Ball
// 获取用户控制
int GetCommand()
int c = 0;
if (GetAsyncKeyState(VK_LEFT) & 0x8000) c |=
if (GetAsyncKeyState(VK_RIGHT) & 0x8000) c |=
CMD_RIGHT;
if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) c |=
int Time(int t)
char strsec[10];
int sec = 20 - (GetTickCount() - t) / 1000;
itoa(sec, strsec, 10);
outtextxy(570, 110, " & &
outtextxy(570, 110, strcat(strsec, "s"));
void menu()
line(449, 0, 449, 480);
char runTime[] = "游戏倒计时 & &
receiveBallNum[] = "接到的球的数量:",
introductiona[] = "按方向键控制盒子移动接住", introductionb[] =
"小球,倒计时为0时游戏结束";
settextcolor(GREEN);
outtextxy(450, 10, introductiona);
outtextxy(450, 30, introductionb);
outtextxy(450, 110, runTime);
outtextxy(450, 210, receiveBallNum);
// 产生随机球
void ballRandom(Ball ball[], int i)
ball[i].x = 16 + 45 *&
ball[i].y = 8 + rand() % 32;
ball[i].v = 1 + rand() % 5;
// 画球,并计算得分
void calculateScore(Ball ball[], int &score)
for(int i = 0; i & NUM; i++)
fillcircle(ball[i].x, ball[i].y, 8);
if(ball[i].y &= 472)
ballRandom(ball, i);
if(box_x + 8 &= ball[i].x && ball[i].x &= box_x
+ 72 && ball[i].y &= 412)
ballRandom(ball, i);
int main()
initgraph(640, 480);
srand(time(NULL));
BeginBatchDraw();
setlinecolor(GREEN);
setfillcolor(WHITE);
Ball ball[NUM];
int dx, i, c, score = 0;
bool flag =
for(i=0; i
ballRandom(ball, i);
int t = GetTickCount();
char strScore[10], str[] = "your score:";
// 游戏主循环
while(flag)
// 显示得分
char strScore[10];
itoa(score, strScore, 10);
outtextxy(570, 210, strScore);
// 画球,并计算得分
calculateScore(ball, score);
fillrectangle(box_x, box_y, box_x+80, box_y+60);
FlushBatchDraw();
// 获取用户控制命令
c = GetCommand();
if (c & CMD_LEFT) dx = -10;
if (c & CMD_RIGHT) dx = 10;
if (c & CMD_QUIT) flag =
if (!Time(t)) flag =
Sleep(25);
// 擦除游戏区
clearrectangle(0, 0, 448, 480);
// 计算球的新坐标
for(i = 0; i & NUM; i++)
ball[i].y += ball[i].v;
// 移动盒子
if(box_x & 0) & box_x = 0;
if(box_x & 368) box_x = 368;
// 清空键盘缓冲区
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
// 输出游戏结果
itoa(score, strScore, 10);
outtextxy(222, 240, strcat(str, strScore));
outtextxy(220, 300, "按任意键退出");
EndBatchDraw();
// 按任意键退出
closegraph();
以下为更改之后的截图:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【使用easyx函数时常见问题解决方案 一】_easyx吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:8,463贴子:
【使用easyx函数时常见问题解决方案 一】收藏
本帖主要说明两个问题的解决方法:一、当函数中含有LPCTSTR类型参数时,编译器常常报错“constchar* 类型的参数与LPCTSTR类型的参数不兼容”。二、loadimage常常失败,因而导致贴图失败。二者其实是有联系的,希望遇到过此问题的吧友们,都看看本帖的接下来的内容。
使用easyx的很多函数的时候,经常会出现这样的时候,当使用的是Visual Studio时候,常常会出现这样问题,错误提示如下 ”const char* 类型的参数与LPCTSTR类型的参数不兼容”。原因很简单,解决方法也很简单,以下是问题例子与解决方法。
问题分析:Easyx中很多函数字符串类参数类型是 LPCTSTR类型的,比如说InputBox函数、loadimage函数等等,如果写成char s[15];InputBox(s, 10, &please inputr&);在vs编译器中会提示两个错误:1. s处 “const char* 类型的参数与LPCTSTR类型的参数不兼容”。2. &please inputr”处 “const char* 类型的参数与LPCTSTR类型的参数不兼容”。因为Windows使用两种字符集ANSI和UNICODE,分别是单字节编码方式与双字节编码方式。而easyx的函数中使用的都是双字节编码方式,因此为了解决这个问题我们需要把改成双字节编码方式。
解决方法:【使用的是VS编译器(高版本vc)】1.把 char 改成 wchar_t。2.给 &please inputr” 前面加上L。也就是写成 L&please input r&。或者1.把 char 改成TCHAR。2.给 &please inputr” 加上_T()。也就是写成 _T(&please input r&)。【补充】wchar_t 类型变量与L&&是想对应的,也就是说在& &前面加上L即转换成wchar_t类型变量。TCHAR类型变量与_T(& &)是相对应的。【使用的是VC6.0编译器】1.不必修改。2.与上面的使用vs时相比,不支持wchar_t 类型的变量,也就是说可以写成TCHAR
写成 _T(&&)
以下是一个例子,也是吧友提出来的问题的解决方法。吧友提出为什么复制InputBox函数的示例代码在VS中运行会出错,代码如下
解决问题后的代码如下:使用wchar_t
使用TCHAR类型变量时
【————————————————分割线——————————————————】【————————————————分割线——————————————————【————————————————分割线——————————————————【————————————————分割线——————————————————
加载图片失败原因主要有两个,第一是格式错误,第二是地址错误。第二个是主要原因。先说说第一个吧。在目前的easyx并不支持putimage PNG类型的图片,所以如果加载一个这样类型的图片是不能够显示出来的。当然,其实我尝试过直接通过更改图片的扩展名把.png图片强行转化成jpg类型,结果依旧不能加载与贴图。仍然需要借助于其他工具转换类型。当然,easyx并非没办法解决这个问题,在本吧贴吧精品里面,有解决这个问题的代码。
地址错误主要分为两种,就是没有弄懂相对路径与绝对路径的区别,还有地址格式写错。这些问题我已经在前面一个贴吧里进行说明,应该做够详细完整。地址为。
同样的,如果有什么问题,欢迎发帖提出。如果是与本帖相关的问题,会保留在本帖,供更多的人参考 ,共同解决问题。
楼主 请问像这种语句outtextxy(440, 65, str);//分数 if (str &= best_str)itoa(score, best_str, 10); outtextxy(610, 65, best_str);//最好分数 if (flag == 0)//背景只用读取一次直接引用的怎么办呀 加L不管用呀
void Load(){IMAGE Iloadimage(&Iimg, L&./res/shoot.jpg&, 200, 50);putimage(0, 0, &Iimg);}楼主
能帮我看看吗?
楼主,我想给游戏增加一个暂停继续的功能,应该怎么做啊,,我的游戏主要是鼠标单击消方块的
VS中,打开项目-属性-常规-字符集,选择多字节字符集也是可以解决这种问题的。注意Debug和Release两个模式都要更改(你点所有配置来更改也可以)。
这个怎么搞呀
登录百度帐号C语言中常用计时方法总结
转载 http://blog.csdn.net/fz_ywj/article/details/8109368
C语言中常用计时方法总结
头文件:time.h
函数原型:time_t time(time_t * timer)
功能:返回以格林尼治时间(GMT)为标准,从日00:00:00到现在的此时此刻所经过的秒数。
用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。
用difftime函数可以计算两个time_t类型的时间的差值,可以用于计时。用difftime(t2,t1)要比t2-t1更准确,因为C标准中并没有规定time_t的单位一定是秒,而difftime会根据机器进行转换,更可靠。
time_t start,
start =time(NULL);
end =time(NULL);
printf("time=%d\n",difftime(end,start));
time_t start,
start =time(NULL);//or time(&start);
//…calculating…
end =time(NULL);
printf("time=%d\n",difftime(end,start));总结:C标准库中的函数,可移植性最好,性能也很稳定,但精度太低,只能精确到秒,对于一般的事件计时还算够用,而对运算时间的计时就明显不够用了。
2. clock()
头文件:time.h
函数原型:clock_t clock(void);
功能:该函数返回值是硬件滴答数,要换算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,这两个量的值都是1000。
clock_t start,
start = clock();
end = clock();
printf("time=%f\n",(double)end-start)/CLK_TCK);
clock_t start,
start = clock();
//…calculating…
end = clock();
printf("time=%f\n",(double)end-start)/CLK_TCK);总结:可以精确到毫秒,适合一般场合的使用。
3. timeGetTime()
头文件:Mmsystem.h
引用库: Winmm.lib
函数原型:DWORD timeGetTime(VOID);
功能:返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天。
DWORDstart,
start= timeGetTime();
end= timeGetTime();
printf("time=%d\n",end-start);
DWORDstart,
start= timeGetTime();
//…calculating…
end= timeGetTime();
printf("time=%d\n",end-start);总结:该函数的时间精度是五毫秒或更大一些,这取决于机器的性能。可用timeBeginPeriod和timeEndPeriod函数提高timeGetTime函数的精度。如果使用了,连续调用timeGetTime函数,一系列返回值的差异由timeBeginPeriod和timeEndPeriod决定。
4. GetTickCount()
头文件:windows.h
函数原型:DWORD WINAPI GetTickCount(void);
功能:返回自设备启动后的毫秒数(不含系统暂停时间)。
DWORDstart,
start= GetTickCount();
end= GetTickCount();
printf("time=%d\n",end-start);
DWORDstart,
start= GetTickCount();
//…calculating…
end= GetTickCount();
printf("time=%d\n",end-start);总结:精确到毫秒。对于一般的实时控制,使用GetTickCount()函数就可以满足精度要求。
5. QueryPerformanceCounter()、QueryPerformanceFrequency()
头文件:windows.h
函数原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
功能:前者获得的是CPU从开机以来执行的时钟周期数。后者用于获得你的机器一秒钟执行多少次,就是你的时钟周期。
补充:LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定:
typedef union_LARGE_INTEGER
DWORD LowP
LONG HighP
LONGLONG QuadP
}LARGE_INTEGER;
typedef union_LARGE_INTEGER
DWORD LowP
LONG HighP
LONGLONG QuadP
}LARGE_INTEGER;
在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。
LARGE_INTEGER
longlong start,end,
QueryPerformanceFrequency(&num);
freq=num.QuadP
QueryPerformanceCounter(&num);
start= num.QuadP
QueryPerformanceCounter(&num);
end= num.QuadP
printf("time=%d\n",(end-start)*1000/freq);
LARGE_INTEGER
longlong start,end,
QueryPerformanceFrequency(&num);
freq=num.QuadP
QueryPerformanceCounter(&num);
start= num.QuadP
//…calculating…
QueryPerformanceCounter(&num);
end= num.QuadP
printf("time=%d\n",(end-start)*1000/freq);总结:这种方法的定时误差不超过1微秒,精度与CPU等机器配置有关,一般认为精度为透微秒级。在Windows平台下进行高精度计时的时候可以考虑这种方法。
6. gettimeofday()
Linux C函数。
头文件:sys/time.h
函数原型:int gettimeofday(struct timeval *tv,struct timezone *tz);
说明:其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果(若不使用则传入NULL即可)。
timeval的定义为:
struct timeval {
  long tv_
  long tv_
struct timeval {
  long tv_ // 秒数
  long tv_ //微秒数
}可见该函数可用于在linux中获得微秒精度的时间。
struct timeval start,
gettimeofday(&start, NULL );
gettimeofday(&end, NULL );
long timeuse =1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_
printf("time=%f\n",timeuse /);
struct timeval start,
gettimeofday(&start, NULL );
//…calculating…
gettimeofday(&end, NULL );
long timeuse =1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_
printf("time=%f\n",timeuse /);总结:使用这种方式计时,精度可达微秒。经验证,在arm+linux的环境下此函数仍可使用。推荐。
7. RDTSC - 读取时间标签计数器
X86架构CPU汇编指令。
操作码:0F 31 指令:RDTSC
功能:将时间标签计数器读入 EDX:EAX寄存器中。
说明:在Pentium以上的CPU中,提供了一条机器指令RDTSC来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用:
inline unsigned long longGetCycleCount()
__asm RDTSC
inline unsigned long longGetCycleCount()
__asm RDTSC
}如果编译器不允许直接用RDTSC的话,可以用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31:
inline unsigned long long GetCycleCount()
__asm _emit 0x0F
__asm _emit 0x31
inline unsigned long long GetCycleCount()
__asm _emit 0x0F
__asm _emit 0x31
} 计算时还需要将得到的数字除以CPU的主频(单位GHZ),就能得到纳秒级的时间了。暂时我还没找到好的获得机器主频的方法,Windows平台下可以考虑用QueryPerformanceFrequency()函数,但这样一来就没办法在Linux下使用此方法。后来我考虑配合sleep函数,获取1秒中的机器周期数的方法来得到CPU主频。如果哪位有更好的方法,还请多多请教。
#ifdef WIN32
#include &windows.h&
#include &sys/unistd.h&
inline unsigned long long GetNTime()
__asm("RDTSC");
static double hz=0.0;
void init_timer()
longlong t1=GetNTime();
#ifdef WIN32
Sleep(1000);
longlong t=GetNTime()-t1;
hz=(double)t/;
printf("hz=%fGhz\n",hz);
long long u_timer(long long *t,int mode)
if(hz&0.001)
init_timer();
*t=GetNTime();
longlong t1=GetNTime()-*t;
longlong ns=t1%1000;
longlong us=(t1/;
longlong ms=(t1/00;
longlong s=t1/;
printf("time=");
printf("%llds",s);
printf("%lldms",ms);
printf("%lldus",us);
printf("%lldns",ns);
printf("\n");
*t=GetNTime();
#ifdef WIN32
#include &windows.h&
#include &sys/unistd.h&
inline unsigned long long GetNTime()
__asm("RDTSC");
static double hz=0.0;
void init_timer()
longlong t1=GetNTime();
#ifdef WIN32
Sleep(1000);
longlong t=GetNTime()-t1;
hz=(double)t/;
printf("hz=%fGhz\n",hz);
long long u_timer(long long *t,int mode)
if(hz&0.001)
init_timer();
*t=GetNTime();
longlong t1=GetNTime()-*t;
longlong ns=t1%1000;
longlong us=(t1/;
longlong ms=(t1/00;
longlong s=t1/;
printf("time=");
printf("%llds",s);
printf("%lldms",ms);
printf("%lldus",us);
printf("%lldns",ns);
printf("\n");
*t=GetNTime();
总结:这种方法精确到纳秒,但缺点是非常短时间的计时会不稳定。最近因为项目需要,我也找了一下ARM+Linux平台上可以用的计时方法,后来选择了gettimeofday()。不知道ARM+Linux平台上有没有类似RDTSC的这种指令。
本文已收录于以下专栏:
相关文章推荐
这里举一个例子,行优先和列优先遍历二维数组的程序执行时间比较,这里需要调用 time.h 编译环境为vs2013#define M #define N 10short a[M][...
在Linux中用C语言计时可以用很多方法。  1. 可用使用C语言库自带的clock()进行计时。如:  #include   #include   using namespa...
一个普通程序员的内心独白....躺枪!躺枪!
我,一个普普通通程序员,没有过人的天赋,没有超乎寻常的好运,该如何逆袭走上人生巅峰?
1.如果是想使用秒级别的技术,可用使用C语言库time.h&自带的clock()进行计时。如:
#include iostream&
#include time.h&
C语言中常用计时方法总结1. time()头文件:time.h函数原型:time_t time(time_t * timer)功能:返回以格林尼治时间(GMT)为标准,从...
程序员跨越式成长指南
完成第一次跨越,你会成为具有一技之长的开发者,月薪可能翻上几番; 完成第二次跨越,你将成为拥有局部优势或行业优势的专业人士,获得个人内在价值的有效提升和外在收入的大幅跃迁……
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:clock_t clock( void );这个函数返回从“开启这个程序进程”...
使用time()函数。它在头文件time.h中具体使用方法如下:time_t a,b;//time_t是表示时间的结构体,你可以在time.h中找到它的原型。a=time(NULL);//...
在很多情况下,为了评判某个算法,函数的优劣,特别是比较同一个功能的两个函数的效率高低时,我们经常通过计算耗费时间作为判断标准。C语言中有两个相关的函数用来计算时间差,分别是:time_t time(...
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的...
C语言中求程序执行的时间可以使用clock()函数,_CRTIMP clock_t __cdecl __MINGW_NOTHROW clock (void);(可以把它直接视为clock_t cloc...
在软件设计中经常会用到关于时间的处理,用来计算语句、函数的执行时间,这时就需要精确到毫秒甚至是微妙的时间。我们首先来介绍一下,时间单位:时间单位还有:毫秒(ms)、微秒 (μs)、纳秒(ns)、皮...
C语言中常用计时方法总结 1. time() 头文件:time.h 函数原型:time_t time(time_t * timer) 功能:返回以格林尼治时间(GMT)为标准,从1970年1月...
C/C++中的日期和时间 摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向...
C\C++标准库中提供了两种计时函数clock()和time()。其用法如下: (1)clock()函数用法void timeConsume(){ double start,stop,...
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5 种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及cloc...
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock...
下面是源代码: #include#include#include#include#define PI 3.1415926#define x 320#define y 240int main(){ in...
C语言的电子时钟
转自:http://hi.baidu.com/csxwczj/item/68cd6e0f056da6eaf55ba67f/*TC2.0编译*/#include #include #inclu...
使用C语言编写的时钟程序,TC下通过,VC需要有graphics包,这个包可以去easyx下载,下载地址为:http://www.easyx.cn/downloads/,下载下来安装就可以了。以下...
c语言中如何添加计时函数,统计程序执行的时间
C语言中常用&计时&方法总结
C语言计时器的使用
Linux C语言计时器使用及实例演示
C语言中的计时方法:time
【C入门向】用C实现倒计时功能
没有更多推荐了,}

我要回帖

更多关于 小米手环3计时功能 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信