Ⅰ linux下C语言获得系统时间的方法
没有完整程序, 不过能提供一点资料
int gettimeofday(struct timeval * tv,struct timezone *tz);
这个函数可以获取当前时间, 貌似只要第一个结构体就行了
struct timeval
{
time_t tv_sec; //秒 [long int]
suseconds_t tv_usec; //微秒 [long int], (10E-6 second)
};
struct timeval
{
long tv_sec;
long tv_usec;
};
然后取微秒的前三位就是小数了, 之后把秒 tv_sec 转化为 tm 格式, 参数用秒的指针就行
struct tm * gmtime(const time_t * t);
//转换成格林威治时间。有时称为GMT或UTC。
struct tm * localtime(const time_t *t);
//转换成本地时间。它可以透过修改TZ环境变数来在一台机器中,不同使用者表示不同时间.
下面是tm的部分参数
int tm_sec; //tm_sec表“秒”数,在[0,61]之间,多出来的两秒是用来处理跳秒问题用的。/* Seconds: 0-59 (K&R says 0-61?) */
int tm_min; //tm_min表“分”数,在[0,59]之间。
int tm_hour; //tm_hour表“时”数,在[0,23]之间。
int tm_mday; //tm_mday表“本月第几日”,在[1,31]之间。
int tm_mon; //tm_mon表“本年第几月”,在[0,11]之间。
int tm_year; //tm_year要加1900表示那一年。 /* /* 年份,其值从1900开始 */*/
int tm_wday; //tm_wday表“本周第几日”,在[0,6]之间。 /* Days since Sunday (0-6) */ /*其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; //tm_yday表“本年第几日”,在[0,365]之间,闰年有366日。 /*其中0代表1月1日,1代表1月2日,以此类推 */*/
int tm_isdst; //tm_isdst表是否为“日光节约时间”
------------------------------华丽丽的分割线--------------------------------------------------
由于很长时间没编程了, 也没有Linux环境, 我就简单写几行代码, 仅作参考
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include<unistd.h>
//这四个不一定够用了
struct timeval tv;
struct timezone tz;
struct tm * p_tm;
//变量没有初始化习惯不好,不要学
gettimeofday(&tv, &tz);
p_tm = gmtime( (const time_t *)&tv.tv_sec );
字符串的组装尤其格式问题自己解决吧
年 p_tm->tm_year+ 1900
月 p_tm->tm_mon+ 1
日 p_tm->tm_mday
时 p_tm->tm_hour+ 1
分 p_tm->tm_min+ 1
秒 p_tm->tm_sec+ 1
小数点后面的部分,注意不够三位还是前面填充0 tv.tv_sec/1000
Ⅱ 如何精确计算程序运行时间比clock()函数更精确的
如果你要更精确的,就需要使用系统API来获取了。
windows sdk下面有几个获取CPU时钟的函数,我记得一个gettickcount(),返回开机到调用时的毫秒数(像360之类的软件的计算系统启动时间就是调用这个api)可以用来计算运行时间。实际上还有更精确的,我没有用过(因为毫秒对我就够用了),所以不记得名字,我搜了一下,给你附了个链接。
记得#include <windows.h>
再想到一点,如果你是用linux的话,我就不太熟了……
参考资料: http://www.cppblog.com/gcs8cn/archive/2010/06/09/117469.html
Ⅲ 怎么用c++获得linux的硬件信息
API之硬件与系统函数ActivateKeyboardLayout激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义Beep用于生成简单的声音CharToOem将一个字串从ANSI字符集转换到OEM字符集ClipCursor将指针限制到指定区域ConvertDefaultLocale将一个特殊的地方标识符转换成真实的地方IDCreateCaret根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符DestroyCaret清除(破坏)一个插入符EnumCalendarInfo枚举在指定“地方”环境中可用的日历信息EnumDateFormats列举指定的“当地”设置中可用的长、短日期格式EnumSystemCodePages枚举系统中已安装或支持的代码页EnumSystemLocales枚举系统已经安装或提供支持的“地方”设置EnumTimeFormats枚举一个指定的地方适用的时间格式ExitWindowsEx退出windows,并用特定的选项重新启动ExpandEnvironmentStrings扩充环境字串FreeEnvironmentStrings翻译指定的环境字串块GetACP判断目前正在生效的ANSI代码页GetAsyncKeyState判断函数调用时指定虚拟键的状态GetCaretBlinkTime判断插入符光标的闪烁频率GetCaretPos判断插入符的当前位置GetClipCursor取得一个矩形,用于描述目前为鼠标指针规定的剪切区域GetCommandLine获得指向当前命令行缓冲区的一个指针GetComputerName取得这台计算机的名称GetCPInfo取得与指定代码页有关的信息GetCurrencyFormat针对指定的“地方”设置,根据货币格式格式化一个数字GetCursor获取目前选择的鼠标指针的句柄GetCursorPos获取鼠标指针的当前位置GetDateFormat针对指定的“当地”格式,对一个系统日期进行格式化GetDoubleClickTime判断连续两次鼠标单击之间会被处理成双击事件的间隔时间GetEnvironmentStrings为包含了当前环境字串设置的一个内存块分配和返回一个句柄GetEnvironmentVariable取得一个环境变量的值GetInputState判断是否存在任何待决(等待处理)的鼠标或键盘事件GetKBCodePage由GetOEMCP取代,两者功能完全相同GetKeyboardLayout取得一个句柄,描述指定应用程序的键盘布局GetKeyboardLayoutList获得系统适用的所有键盘布局的一个列表GetKeyboardLayoutName取得当前活动键盘布局的名称GetKeyboardState取得键盘上每个虚拟键当前的状态GetKeyboardType了解与正在使用的键盘有关的信息GetKeyNameText在给出扫描码的前提下,判断键名GetKeyState针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态GetLastError针对之前调用的api函数,用这个函数取得扩展错误信息GetLocaleInfo取得与指定“地方”有关的信息GetLocalTime取得本地日期和时间GetNumberFormat针对指定的“地方”,按特定的格式格式化一个数字GetOEMCP判断在OEM和ANSI字符集间转换的windows代码页GetQueueStatus判断应用程序消息队列中待决(等待处理)的消息类型GetSysColor判断指定windows显示对象的颜色GetSystemDefaultLangID取得系统的默认语言IDGetSystemDefaultLCID取得当前的默认系统“地方”GetSystemInfo取得与底层硬件平台有关的信息GetSystemMetrics返回与windows环境有关的信息GetSystemPowerStatus获得与当前系统电源状态有关的信息GetSystemTime取得当前系统时间,这个时间采用的是“协同世界时间”(即UTC,也叫做GMT)格式GetSystemTimeAdjustment使内部系统时钟与一个外部的时钟信号源同步GetThreadLocale取得当前线程的地方IDGetTickCount用于获取自windows启动以来经历的时间长度(毫秒)GetTimeFormat针对当前指定的“地方”,按特定的格式格式化一个系统时间GetTimeZoneInformation取得与系统时区设置有关的信息GetUserDefaultLangID为当前用户取得默认语言IDGetUserDefaultLCID取得当前用户的默认“地方”设置GetUserName取得当前用户的名字GetVersion判断当前运行的Windows和DOS版本GetVersionEx取得与平台和操作系统有关的版本信息HideCaret在指定的窗口隐藏插入符(光标)IsValidCodePage判断一个代码页是否有效IsValidLocale判断地方标识符是否有效keybd_event这个函数模拟了键盘行动LoadKeyboardLayout载入一个键盘布局MapVirtualKey根据指定的映射类型,执行不同的扫描码和字符转换MapVirtualKeyEx根据指定的映射类型,执行不同的扫描码和字符转换MessageBeep播放一个系统声音。系统声音的分配方案是在控制面板里决定的mouse_event模拟一次鼠标事件OemKeyScan判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态OemToChar将OEM字符集的一个字串转换到ANSI字符集SetCaretBlinkTime指定插入符(光标)的闪烁频率SetCaretPos指定插入符的位置SetComputerName设置新的计算机名SetCursor将指定的鼠标指针设为当前指针SetCursorPos设置指针的位置SetDoubleClickTime设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间SetEnvironmentVariable将一个环境变量设为指定的值SetKeyboardState设置每个虚拟键当前在键盘上的状态SetLocaleInfo改变用户“地方”设置信息SetLocalTime设置当前地方时间SetSysColors设置指定窗口显示对象的颜色SetSystemCursor改变任何一个标准系统指针SetSystemTime设置当前系统时间SetSystemTimeAdjustment定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步SetThreadLocale为当前线程设置地方SetTimeZoneInformation设置系统时区信息ShowCaret在指定的窗口里显示插入符(光标)ShowCursor控制鼠标指针的可视性SwapMouseButton决定是否互换鼠标左右键的功能SystemParametersInfo获取和设置数量众多的windows系统参数将系统时间转换成地方时间ToAscii根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符ToUnicode根据当前的扫描码和键盘信息,将一个虚拟键转换成Unicode字符UnloadKeyboardLayout卸载指定的键盘布局VkKeyScan针对Windows字符集中一个ASCII字符,判断虚拟键码和Shift键的状态
Ⅳ socket编程在windows和linux下的区别
下面大概分几个方面进行罗列:
Linux要包含
[cpp]
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
等头文件,而windows下则是包含
[cpp]
#include <winsock.h>
。
Linux中socket为整形,Windows中为一个SOCKET。
Linux中关闭socket为close,Windows中为closesocket。
Linux中有变量socklen_t,Windows中直接为int。
因为linux中的socket与普通的fd一样,所以可以在TCP的socket中,发送与接收数据时,直接使用read和write。而windows只能使用recv和send。
设置socet选项,比如设置socket为非阻塞的。Linux下为
[cpp]
flag = fcntl (fd, F_GETFL);
fcntl (fd, F_SETFL, flag | O_NONBLOCK);
,Windows下为
[cpp]
flag = 1;
ioctlsocket (fd, FIONBIO, (unsigned long *) &flag);
。
当非阻塞socket的TCP连接正在进行时,Linux的错误号为EINPROGRESS,Windows的错误号为WSAEWOULDBLOCK。
file
Linux下面,文件换行是"\n",而windows下面是"\r\n"。
Linux下面,目录分隔符是"/",而windows下面是"\"。
Linux与Windows下面,均可以使用stat调用来查询文件信息。但是,Linux只支持2G大小,而Windows只支持4G大小。为了支持更大的文件查询,可以在Linux环境下加
_FILE_OFFSET_BITS=64定义,在Windows下面使用_stat64调用,入参为struct __stat64。
Linux中可根据stat的st_mode判断文件类型,有S_ISREG、S_ISDIR等宏。Windows中没有,需要自己定义相应的宏,如
[cpp]
#define S_ISREG(m) (((m) & 0170000) == (0100000))
#define S_ISDIR(m) (((m) & 0170000) == (0040000))
Linux中删除文件是unlink,Windows中为DeleteFile。
time
Linux中,time_t结构是长整形。而windows中,time_t结构是64位的整形。如果要在windows始time_t为32位无符号整形,可以加宏定义,_USE_32BIT_TIME_T。
Linux中,sleep的单位为秒。Windows中,Sleep的单位为毫秒。即,Linux下sleep (1),在Windows环境下则需要Sleep (1000)。
Windows中的timecmp宏,不支持大于等于或者小于等于。
Windows中没有struct timeval结构的加减宏可以使用,需要手动定义:
[cpp]
#define MICROSECONDS (1000 * 1000)
#define timeradd(t1, t2, t3) do { \
(t3)->tv_sec = (t1)->tv_sec + (t2)->tv_sec; \
(t3)->tv_usec = (t1)->tv_usec + (t2)->tv_usec % MICROSECONDS; \
if ((t1)->tv_usec + (t2)->tv_usec > MICROSECONDS) (t3)->tv_sec ++; \
} while (0)
#define timersub(t1, t2, t3) do { \
(t3)->tv_sec = (t1)->tv_sec - (t2)->tv_sec; \
(t3)->tv_usec = (t1)->tv_usec - (t2)->tv_usec; \
if ((t1)->tv_usec - (t2)->tv_usec < 0) (t3)->tv_usec --, (t3)->tv_usec += MICROSECONDS; \
} while (0)
调用进程
Linux下可以直接使用system来调用外部程序。Windows最好使用WinExec,因为WinExec可以支持是打开还是隐藏程序窗口。用WinExec的第二个入参指明,如
SW_SHOW/SW_HIDE。
杂项
Linux为srandom和random函数,Windows为srand和rand函数。
Linux为snprintf,Windows为_snprintf。
同理,Linux中的strcasecmp,Windows为_stricmp。
错误处理
Linux下面,通常使用全局变量errno来表示函数执行的错误号。Windows下要使用GetLastError ()调用来取得。
Linux环境下仅有的
这些函数或者宏,Windows中完全没有,需要用户手动实现。
atoll
[cpp]
long long
atoll (const char *p)
{
int minus = 0;
long long value = 0;
if (*p == '-')
{
minus ++;
p ++;
}
while (*p >= '0' && *p <= '9')
{
value *= 10;
value += *p - '0';
p ++;
}
return minus ? 0 - value : value;
}
gettimeofday
[cpp]
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
#define EPOCHFILETIME 11644473600000000Ui64
#else
#define EPOCHFILETIME 11644473600000000ULL
#endif
struct timezone
{
int tz_minuteswest;
int tz_dsttime;
};
int
gettimeofday (struct timeval *tv, struct timezone *tz)
{
FILETIME ft;
LARGE_INTEGER li;
__int64 t;
static int tzflag;
if (tv)
{
GetSystemTimeAsFileTime (&ft);
li.LowPart = ft.dwLowDateTime;
li.HighPart = ft.dwHighDateTime;
t = li.QuadPart; /* In 100-nanosecond intervals */
t -= EPOCHFILETIME; /* Offset to the Epoch time */
t /= 10; /* In microseconds */
tv->tv_sec = (long) (t / 1000000);
tv->tv_usec = (long) (t % 1000000);
}
if (tz)
{
if (!tzflag)
{
_tzset ();
tzflag++;
}
tz->tz_minuteswest = _timezone / 60;
tz->tz_dsttime = _daylight;
}
return 0;
}
编译相关
当前函数,Linux用__FUNCTION__表示,Windows用__func__表示。
--------------------------------------------------------------------------------
Socket 编程 windows到Linux代码移植遇到的问题
1)头文件
windows下winsock.h/winsock2.h
linux下sys/socket.h
错误处理:errno.h
2)初始化
windows下需要用WSAStartup
linux下不需要
3)关闭socket
windows下closesocket(...)
linux下close(...)
4)类型
windows下SOCKET
linux下int
如我用到的一些宏:
#ifdef WIN32
typedef int socklen_t;
typedef int ssize_t;
#endif
#ifdef __LINUX__
typedef int SOCKET;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
#define FALSE 0
#define SOCKET_ERROR (-1)
#endif
5)获取错误码
windows下getlasterror()/WSAGetLastError()
linux下errno变量
6)设置非阻塞
windows下ioctlsocket()
linux下fcntl() <fcntl.h>
7)send函数最后一个参数
windows下一般设置为0
linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可 能会导致程序退出。
8)毫秒级时间获取
windows下GetTickCount()
linux下gettimeofday()
3、多线程
多线程: (win)process.h --〉(linux)pthread.h
_beginthread --> pthread_create
_endthread --> pthread_exit
-----------------------------------------------------------------
windows与linux平台使用的socket均继承自Berkeley socket(rfc3493),他们都支持select I/O模型,均支持使用getaddrinfo与getnameinfo实现协议无关编程。但存在细微差别,
主要有:
头文件及类库。windows使用winsock2.h(需要在windows.h前包含),并要链接库ws2_32.lib;linux使用netinet/in.h, netdb.h等。
windows下在使用socket之前与之后要分别使用WSAStartup与WSAClean。
关闭socket,windows使用closesocket,linux使用close。
send*与recv*函数参数之socket长度的类型,windows为int,linux为socklen_t,可预编译指令中处理这一差异,当平台为windows时#define socklen_t unsigned int。
select函数第一个参数,windows忽略该参数,linux下该参数表示集合中socket的上限值,一般设为sockfd(需select的socket) + 1。
windows下socket函数返回值类型为SOCKET(unsigned int),其中发生错误时返回INVALID_SOCKET(0),linux下socket函数返回值类型int, 发生错误时返回-1。
另外,如果绑定本机回环地址,windows下sendto函数可以通过,linux下sendto回报错:errno=22, Invalid arguement。一般情况下均绑定通配地址。
转载jlins
Ⅳ unix下获取精确到毫秒的系统的时间
C语言如何获得精确到毫秒的时间
在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精确到代码块或某个操作运行时所消耗的时间,time命令就不给力了。如果对时间的精度要求不高的话,可以调用标准C的接口time来得到开始和结束的时间,再调用difftime接口来计算时间差,精度是秒,代码如下所示:
time.c
如果要让程序休眠3秒,Windows使用Sleep(3000),Linux使用sleep(3),即Windows的Sleep接口的参数的单位是毫秒,Linux的sleep接口的参数的单位是秒。 如果需要精确到毫秒,以上程序就发挥不了作用,如果在java要达到这要求就很简单了,代码如下所示:
Time.java
通过Google找了一些资料后,发现C语言里没有标准的接口可以获得精确到毫秒的时间,都会调用到与操作系统相关的API,下面会分别介绍在Linux和Windows系统下的多种实现方法,希望对大家有帮助。
使用gettimeofday接口:
gettimeofday.c
gettimeofday能得到微秒数,比毫秒还要更精确。
使用ftime接口:
ftime.c
使用GetTickCount接口:
下载:
GetTickCount.c
Windows系统下有些编译器使用printf输出64位整数参数要使用%I64d,比如VC。
使用QueryPerformanceX接口:
QueryPerformance.c
使用GetSystemTime接口:
GetSystemTime.c
这种方法没给出计算时间差的实现,只给出如何用GetSystemTime调用得到当前时间,计算时间差比较简单,根据年、月、日、时、分秒和毫秒计算出一个整数,再将两整数相减即可。
以上是通过Google找到一些用C语言获得精确到毫秒的实现方法,对比Linux和Windows的方法,发现两个系统的API命名很不一样,Linux接口名要么都是小写要么使用下划线(_)来分隔单词,而Windows接口名中的单词首字母大写。
Ⅵ socket编程在windows和linux下的区别是什么
1.
头文件
windows下winsock.h或winsock2.h
linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in.h里已经包含了,可以省了)
2.
初始化
windows下需要用WSAStartup启动Ws2_32.lib,并且要用#pragma
comment(lib,"Ws2_32")来告知编译器链接该lib。
linux下不需要
3.
关闭socket
windows下closesocket(...)
linux下close(...)
4.
类型
windows下SOCKET
linux下int
5.
获取错误码
windows下getlasterror()/WSAGetLastError()
linux下,未能成功执行的socket操作会返回-1;如果包含了errno.h,就会设置errno变量
6.
设置非阻塞
windows下ioctlsocket()
linux下fcntl(),需要头文件fcntl.h
7.
send函数最后一个参数
windows下一般设置为0
linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可能会导致程序退出
8.
毫秒级时间获取
windows下GetTickCount()
linux下gettimeofday()
Ⅶ c语言如何计时
C语言中提供了许多库函数来实现计时功能
下面介绍一些常用的计时函数
1. time()
头文件:time.h
函数原型:time_t time(time_t * timer)
功能:返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的时此刻所经过的秒数
用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。
用difftime函数可以计算两个time_t类型的时间的差值,可以用于计时。用difftime(t2,t1)要比t2-t1更准确,因为C标准中并没有规定time_t的单位一定是秒,而difftime会根据机器进行转换,更可靠。
说明:C标准库中的函数,可移植性最好,性能也很稳定,但精度太低,只能精确到秒,对于一般的事件计时还算够用,而对运算时间的计时就明显不够用了。
2. clock()
头文件:time.h
函数原型:clock_t clock(void);
功能:该函数返回值是硬件滴答数,要换算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,这两个量的值都是1000。
说明:可以精确到毫秒,适合一般场合的使用。
3. timeGetTime()
头文件:Mmsystem.h引用库: Winmm.lib
函数原型:DWORD timeGetTime(VOID);
功能:返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天。
说明:该函数的时间精度是五毫秒或更大一些,这取决于机器的性能。可用timeBeginPeriod和timeEndPeriod函数提高timeGetTime函数的精度。如果使用了,连续调用timeGetTime函数,一系列返回值的差异由timeBeginPeriod和timeEndPeriod决定。
4. GetTickCount()
头文件:windows.h
函数原型:DWORD WINAPI GetTickCount(void);
功能:返回自设备启动后的毫秒数(不含系统暂停时间)。
说明:精确到毫秒。对于一般的实时控制,使用GetTickCount()函数就可以满足精度要求。
5. QueryPerformanceCounter()、QueryPerformanceFrequency()
头文件:windows.h
函数原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
功能:前者获得的是CPU从开机以来执行的时钟周期数。后者用于获得你的机器一秒钟执行多少次,就是你的时钟周期。
补充:LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定:
在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。
说明:这种方法的定时误差不超过1微秒,精度与CPU等机器配置有关,一般认为精度为透微秒级。在Windows平台下进行高精度计时的时候可以考虑这种方法。
6. gettimeofday()
Linux C函数。
头文件:sys/time.h
函数原型:int gettimeofday(struct timeval *tv,struct timezone *tz);
说明:其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果(若不使用则传入NULL即可)。
timeval的定义为:
structtimeval{
longtv_sec;//秒数
longtv_usec;//微秒数
}
可见该函数可用于在linux中获得微秒精度的时间。
说明:使用这种方式计时,精度可达微秒。经验证,在arm+linux的环境下此函数仍可使用。
Ⅷ 从没遇见,getTickCount只能得到64HZ的时间间隔,求教
补充: 不是和你说了么 你这段程序测的是两次循环中间的间隔
你要是再换个更好点的机器 性能会更好(也就是说 VB程序的运行速度 和机器处理速度有关
这么说你懂了吧)
我电脑上的虚拟机上只有C++ 没实验过
按你的说法 大概虚拟机也模拟出机器的处理速度了吧(我这是Linux的 不知会不会比XP快些)
================
While i < 100
If t1 <> GetTickCount Then
Text1 = Text1 & GetTickCount & ","
t1 = GetTickCount
i = i + 1
End If
这是个循环啊
两次循环中间的间隔是 15毫秒啊
加些语句
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim i As Integer
Dim t1 As Long
Text1 = ""
While i < 10
If t1 <> GetTickCount Then
Text1 = Text1 & GetTickCount & ","
t1 = GetTickCount
i = i + 1
For j = 1 To 1000000
j = j + 1
Next
End If
' DoEvents
Wend
End Sub
结果是这个: (所花时间增多了)
2676765,2676812,2676859,2676890,2676937,2676984,2677031,2677078,2677125,2677171,
Ⅸ socket在windows下和linux下的区别的网络文摘
1)头文件 windows下winsock.h/winsock2.h
linux下sys/socket.h 错误处理:errno.h
2)初始化
windows下需要用WSAStartup
WSADATA wsaData;
err = WSAStartup(0x202,&wsaData);
if ( err != 0 )
{
return 0;
}
else if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) //检测是否支持这个版本的socket
{
WSACleanup( );
return 0;
}
对应的退出清理用WSACleanup( );
linux下不需要
3)关闭socket
windows下closesocket(...)
linux下close(...)
4)socket类型
windows下SOCKET
linux下int
5)获取错误码
windows下WSAGetLastError()
linux下errno变量
extern int errno;
int geterror(){return errno;}
6)设置非阻塞
windows下ioctlsocket(server_socket,FIONBIO,&ul); int ul = 1
linux下fcntl(server_socket,F_SETFL, O_NONBLOCK); <fcntl.h>
7)send函数最后一个参数
windows下一般设置为0
linux下必须是后几个参数用到的socket中,值最大的数(整型)加1 (另一种说法是设置为MSG_NOSIGNAL)
8)毫秒级时间获取
windows下GetTickCount()
linux下gettimeofday()
Ⅹ gettickcount linux用什么替代
ime()、gettimeofday()及GetTickCount()效率比较 time()和gettimeofday()是linux的系统调用,GetTickCount()是windows的函数。
time:返回至1970-1-1 00:00:00至今的秒数; gettimeofday:除了返回秒数外,还有纳秒数,用于更精确的计时; GetTickCount:返回系统启动至今的毫秒数
使用三个函数,分别调用1千万次,测试结果如下: time:约967毫秒; gettimeofday:约1800毫秒; GetTickCount:约70毫秒;
可见,GetTickCount要快很多很多,在linux系统下,频繁使用time及gettimeofday严重影响效率。