在窗体模式下, 我可以使用SetTimer(hWnd, TIMER_ID_NEW_LOG_CHECK_TIME, 1000, NULL);
KillTimer(hWnd, TIMER_ID_NEW_LOG_CHECK_TIME);
并在主窗体消息环中相应
case WM_TIMER:
TIMER_ID_NEW_LOG_CHECK_TIME: //处理函数
现在我在console模式下编程, 请教专家们, 因为Console没有消息环, 所以如何处理时间问题呢?
我一开始想的方法是, 做一个线程, 每次sleep(1000)然后判断时间是否到达, 可是这样做比较复杂,同时系统效率会降低.
请教好的设计思路模式或者编程方法, 有代码当然更好啦, 谢谢各位了
KillTimer(hWnd, TIMER_ID_NEW_LOG_CHECK_TIME);
并在主窗体消息环中相应
case WM_TIMER:
TIMER_ID_NEW_LOG_CHECK_TIME: //处理函数
现在我在console模式下编程, 请教专家们, 因为Console没有消息环, 所以如何处理时间问题呢?
我一开始想的方法是, 做一个线程, 每次sleep(1000)然后判断时间是否到达, 可是这样做比较复杂,同时系统效率会降低.
请教好的设计思路模式或者编程方法, 有代码当然更好啦, 谢谢各位了
::GetCurrentTime(...) //do your jobs
}
使用GetTickCount比使用GetCurrentTime精确!
TCHAR szBuffer[128];
if(fgets(szBuffer, lstrlen(szBuffer), stdin))
{
//退出
}
//**********************************************
//Create By: freeeyes
//Date : 2005-03-08
//Target : ³õʼ»¯Ê±¼äÀà, ´´½¨Ò»¸öʱ¼äÏß³Ì
//**********************************************
void CTimeSave::InitTimeSave(UINT nTime)
{
nSaveTime = nTime;
nTargetTime = (UINT)GetTickCount() + nSaveTime; m_Thread = CreateThread(NULL, 0, TimeSave_Thread, (LPVOID)this, 0, NULL);
if(NULL == m_Thread)
{
printf("\nInit Time Save Thread Error.");
}
}
void CTimeSave::TimeSaveThread()
{
UINT nCurrentTime;
char szLog[MAXCHARBUFF];
SYSTEMTIME pTime;
if(nSaveTime == 0)
{
printf("\nCreate TimeSave Thread Fail,because SaveTime = 0");
return;
}
while(TRUE)
{
nCurrentTime = (UINT)GetTickCount();
if(nCurrentTime >= nTargetTime)
{
GetLocalTime(&pTime);
wsprintf(szLog, "\n[%02u:%02u:%02u] Time Is OK;", pTime.wHour, pTime.wMinute, pTime.wSecond);
printf(szLog);
dbTcpServer.SendDBWorks();
nTargetTime = nTargetTime + nSaveTime;
}
else
{
Sleep(100);
}
}
return;
}void CTimeSave::CLoseTimeSaveThread()
{
if(NULL != m_Thread)
{
CloseHandle(m_Thread);
}
}
http://community.csdn.net/Expert/topic/2883/2883226.xml?temp=.708645
其中
LLnju(LLnju) 的方案是可行的,我试过