关于时间的一些总结和全屏的一个知识点和百度的一道算法题
在进行获取时间的时候,我们总是会用系统提供的各种函数。比如C语言中的time但是这个函数在wince下不能运行?我也不知道为什么。当向前查找的时候,发现无法定位。可能在wince下面没有包含C中的time.h这个头文件。
所以在这里你就得看time.h中的源代码。其中有这么一个函数是可以用在wince上面_time64(0),当然这个只是到秒的级别。如果想计算在未来的某个时间点再触发某个事情的话,用这个函数式最优的选择。你可以通过把当前时间获取出来,然后加上经过一段时间的秒数进行计算,然后再通过_localtime64_s这个函数进行转化。
time_t times = _time64(0);
times += m_iOrderTimeLast * 60;
tm t_tm;
_localtime64_s(&t_tm, ×);
如上面所示。
但是你如果想要对某段时间进行毫秒级别的计时,想要用C语言中的clock函数,也会和上面一样的报错。所以得用C++中提供的api:GetTickCount进行操作。
该函数和C语言中的clock用法差不多。
int start = GetTickCount();
for (int i = 0; i < iLen; ++i)
{
m_pSerial->epcSerialSendData(Value + i, 1);
Sleep(1);
}
int end = GetTickCount();
int LenTime = end - start;
如上例所示就能计算该for循环用了多长时间(精确到毫秒).
当我们想要让我们写的界面暂满整个界面的时候可以用这样的一个函数来进行
int x = GetSystemMetrics(SM_CXSCREEN);
int y = GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, x, y, 0);
当然,这个只适用于wince中,对于pc的界面太大,这个很难充满整个界面。需要其他的设置,我目前还没有研究,如果有哪个大神来浏览我这博客,希望给点该方面的建议或意见。不胜感激。
下面是一道百度的算法题,闲来无事写的,忘各位大牛给点建议啊,也只是做了下简单的测试。
坐标轴上从左到右依次的点为a[0]、a[1]、a[2]……a[n-1],设一根木棒的长度为L,求L最多能覆盖坐标轴的几个点?
#include <stdio.h> #define MAXN 1024 int Array[MAXN]; inline int Min(int left, int right) { return left < right ? left:right; } inline int Max(int left, int right) { return left < right? right:left; } int binarySearch(int left, int right, int len) { int iLeft = left; int iMid; while (left <= right) { iMid = (left + right) >> 1; if (Array[iMid] - Array[iLeft] > len) { right = iMid - 1; } else if (Array[iMid] - Array[iLeft] < len) { left = iMid + 1; } else return iMid; } left = Min(left, right); return left; } int Judge(int n, int len) { int left = 0, right = n - 1; int maxVal = -1; while (left + maxVal < right) { int MidVal = binarySearch(left, right, len) - left + 1; maxVal = Max(MidVal, maxVal); ++left; } return maxVal; } int main() { int n, len; while (scanf("%d%d", &n, &len) != EOF) { for (int i = 0; i < n; ++i)scanf("%d", &Array[i]); printf("%d\n", Judge(n, len)); } return 0; }