由于某些原因项目
中用到的boost库从boost_1_39升级到boost_1_55,升级完成后将程序放在xp下测试,提示找不到
GetTickCount64()
函数,整合工程却没有发现哪调用了此函数,最后在
boost官网
上早有人提到了这个问题。
branches/release/boost/thread/win32/thread_primitives.hpp
r81667 r83525
18 18 #include <algorithm>
19 19
20 #ifndef BOOST_THREAD_WIN32_HAS_GET_TICK_COUNT_64
21 #i
Windows上
使用
std::thread对
XP
SP2有兼容问题,调用了系统API:GetLogicalProcessorInformation
可以
使用
boost
::thread
解决
,
boost
::thread编译需加上支持
XP
宏定义
b2 release define=
BOOST
_USE_WINAPI_VERSION=
BOOST
_WINAPI_VERSION_WIN
XP
相对于在栈空间分配内存,堆中分配内存其实是非常缓慢的。
另外,由于堆中分配的内存,需要开发者编码回收,当系统非常庞大时,容易出现分配的内容没有回收
导致
内存泄露的现象。
因此,许多Bible建议开发者尽量
使用
栈空间,少用甚至不用malloc和free、new和delete;
虽然栈的空间较小,但这样的建议随着计算机的位数从32位升级到
64
位,越来越成为真理。
但我还是想说,这是有限制的:
Get
Tick
Count
有重置为0的问题,所以用Get
Tick
Count
64
,在
xp
下用
函数
代替Get
Tick
Count
64
inline __int
64
_GetSys
Tick
Count
64
()
LARGE_INTEGER
Tick
sPerSecond = { 0 };
LARGE_INTEGER
Tick
;
if (!
Tick
sPerSecond.QuadPart)
ULONGLONG last
Tick
= Get
Tick
Count
64
();
Sleep(2000);
ULONGLONG now
Tick
= Get
Tick
Count
64
();
if(last
Tick
-now
Tick
>3500)
//永远不会走这里
}else
//会一直走这是
//要改成这样
if (now
Tick
>= last
Tick
+ 3500){
else{
编写的应用软件在
XP
系统环境工作时提示“无法定位程序输入点Get
Tick
Count
64
在动态链接
库
kernel32.dll上”。
解决
办法既是在头文件添加如下代码:
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT
0x0600
即可
解决
问题。
参考链接:
“无法定位程序输入点Get
Tick
Coun...
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载
使用
!
## 项目备注
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载
使用
!
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。
3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。
下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
--------
Get
Tick
Count
函数
返回自系统开机以来的毫秒数,因此当系统运行了49.7天后,Get
Tick
Count
函数
的返回值会从最大值0xFFFFFFFF(4294967295)重新变为0。这种情况被称为Get
Tick
Count
重置问题。
为了
解决
这个问题,你可以
使用
Get
Tick
Count
64
函数
代替Get
Tick
Count
函数
,Get
Tick
Count
64
函数
返回自系统开机以来的毫秒数,返回值是一个
64
位无符号整数,所以不会出现重置问题。如果你需要兼容Windows
XP
或更早的操作系统,你可以
使用
timeGetTime
函数
代替Get
Tick
Count
函数
,timeGetTime
函数
也返回自系统开机以来的毫秒数,但是它的返回值是32位无符号整数,因此也会重置。
另外,你也可以
使用
QueryPerformance
Count
er
函数
来获取
高
精度计时器的值,这个
函数
的返回值不会受到系统重启的影响。但是,
使用
QueryPerformance
Count
er
函数
需要一些额外的代码处理和计算,而且在某些系统上可能会受到时钟频率变化等因素的影响。
instant2333: