我正在尝试每天调用一个函数。现在我的代码如下:
do {
Thread.sleep(1000*60*60*24);
readInFile();
} while (true);
问题在于每天都会调用它以及执行函数readInFile
所需的时间。有没有办法每24小时进行一次回调或其他事情?
答案 0 :(得分:6)
您可以使用ScheduledExecutorService.scheduleAtFixedRate
方法以固定费率调用Runnable
。
每天调用runnable的示例代码(没有初始延迟):
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.DAYS);
答案 1 :(得分:3)
你可以试试这个:
func saveContext () {
if let moc = self.managedObjectContext {
var error: NSError? = nil
if moc.hasChanges && !moc.save(&error) {
//ERROR: CANNOT CONVERT VALUE OF TYPE 'INOUT NSERROR?'(AKA 'INOUT OPTIONAL<NSERROR>') TO EXPECTED ARGUMENT TYPE '()'
NSLog("Unresolved error \(error), \(error!.userInfo)")
abort()
}
}
}
或者您可以使用ScheduledExecutorService
可以安排命令在给定后运行的ExecutorService 延迟,或定期执行。
答案 2 :(得分:1)
您可以使用Quartz或Spring等调度程序将代码设置为每天运行一次。
<强>弹簧强> http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
http://spring.io/guides/gs/scheduling-tasks/
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# lon_0 is central longitude of projection.
# resolution = 'c' means use crude resolution coastlines.
m = Basemap(projection='hammer',lon_0=0,resolution='c')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,420.,60.))
m.drawmapboundary(fill_color='aqua')
plt.title("Hammer Projection")
plt.show()
<强>石英强> https://quartz-scheduler.org
//1:01 am every day
@Scheduled(cron = "0 1 1 * * ?")
public void readDaily() {
readInFile();
}