我有一个程序在股票市场开启时每5分钟运行一次,运行一次,然后输入以下功能,如果股票市场开放,则返回5分钟。
我不明白的是,经过一段时间后,通常是大约18或19个小时,它会崩溃,返回一个sigsegv错误。我不知道为什么,因为它不是写入任何内存 - 虽然我对系统时间类型知之甚少,所以也许就是这样?
无论如何,你能给予的任何帮助都将非常感谢!在此先感谢!!
void KillTimeUntilNextStockDataReleaseOnWeb()
{
SYSTEMTIME tLocalTimeNow;
cout<<"\n*****CHECKING IF RUN HAS JUST COMPLETED OR NOT*****\n";
GetLocalTime(&tLocalTimeNow);//CHECK IF A RUN HAS JUST COMPLETED. IF SO, AWAIT NEXT 5 MINUTE MARK
while((tLocalTimeNow.wMinute % 5)==0)
GetLocalTime(&tLocalTimeNow);
cout<<"\n*****AWAITING 5 MINUTE MARK TO UPDATE STOCK DATA*****\n";
GetLocalTime(&tLocalTimeNow);//LOOP THROUGH THIS SECTION, CHECKING CURRENT TIME, UNTIL 5 MINUTE UPDATE. THEN PROCEED
while((tLocalTimeNow.wMinute % 5)!=0)
GetLocalTime(&tLocalTimeNow);
cout<<"\n*****CHECKING IF MARKET IS OPEN*****\n";
//CHECK IF STOCK MARKET IS EVEN OPEN. IF NOT, REPEAT
GetLocalTime(&tLocalTimeNow);
while((tLocalTimeNow.wHour < 8)||(tLocalTimeNow.wHour) > 17)
GetLocalTime(&tLocalTimeNow);
cout<<"\n*****PROGRAM CONTINUING*****\n";
return;
}
答案 0 :(得分:2)
如果要“等待X秒”,则Windows系统调用Sleep(x)
将休眠x毫秒。但是请注意,如果你睡了300秒,经过3秒的一些操作,这意味着你每隔5分钟漂移3秒 - 这可能无关紧要,但如果你一直保持相同的时间至关重要,那么你应该找出[基于time
或某些此类函数]到下一个边界有多长时间,然后睡觉那个数量[可能会运行一点点然后再添加一个检查并在你早醒时睡觉]。如果“每五分钟”更接近一件事,那么300秒就可以了。
还有其他方法可以等待一段时间,但我怀疑上述情况已经足够了。
答案 1 :(得分:0)
我建议使用Waitable Timer而不是在循环中使用繁忙的循环,甚至是Sleep()
。这样,调用线程可以在等待时有效地休眠,同时仍然提供一种机制,以便在需要时提前“唤醒”。