我有一个程序,当股市开盘时,它每5分钟运行一次,运行一次,然后进入以下函数,如果股市开盘,该函数将在5分钟后返回。
我不明白的是,在一段时间后,通常是大约18或19个小时,它崩溃并返回sigsegv错误。我不知道为什么,因为它没有写入任何内存-尽管我对systemtime类型了解不多,所以可能就是这样?
无论如何,您能提供的任何帮助都将非常感谢!提前感谢!!
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;
}发布于 2013-08-21 05:59:50
如果你想“等待X秒”,那么Windows系统调用Sleep(x)将休眠x毫秒。但是请注意,如果你睡眠了300秒,在一些需要3秒的操作之后,这意味着你每5分钟就会漂移3秒-这可能无关紧要,但如果你总是保持相同的定时是至关重要的,你应该根据time或类似的函数计算出到下一个边界有多长时间,然后睡眠这个量可能会短一点,然后添加另一个检查,如果你醒得早的话就睡眠。如果“每五分钟”是一个近似值,那么300秒就可以了。
还有其他方法可以等待给定的时间,但我怀疑上面的方法就足够了。
发布于 2013-08-21 07:15:49
我建议使用Waitable Timer,而不是使用繁忙的循环,甚至在循环中使用Sleep()。这样,调用线程可以在等待时有效地休眠,同时仍然提供了一种在需要时提早“唤醒”的机制。
https://stackoverflow.com/questions/18342751
复制相似问题