我需要每120秒运行一段代码.我正在寻找一种在VBA中执行此操作的简单方法.我知道有可能从Auto_Open事件中获取计时器值以防止必须使用幻数,但我无法完全了解如何触发计时器以获得每120秒运行一次的东西.
如果我可以避免它,我真的不想在睡眠中使用无限循环.
编辑:
基于提供的答案的交叉发布位于:Excel VBA Application.OnTime.我觉得使用这个想法是个坏主意......想法无论如何?
我怎样才能重新安排计时器.我试图取消定时器/时间任务,并使用方法再次安排它.但它显示异常错误:
Exception errorjava.lang.IllegalStateException: TimerTask is scheduled already
代码我用过它:
private Timer timer = new Timer("alertTimer",true);
public void reScheduleTimer(int duration) {
timer.cancel();
timer.schedule(timerTask, 1000L, duration * 1000L);
}
我试图在Quartz.Net中建立一个重复的每日时间表,但有一些问题:
首先,我建立一个每日时间表,在12:45重复使用Quartz.Net代码,如下所示:
var trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(s =>
s.OnEveryDay().StartingDailyAt(new TimeOfDay(13, 00)))
.Build();
var times = TriggerUtils.ComputeFireTimes(trigger as IOperableTrigger, null, 10);
foreach (var time in times) Console.WriteLine(time);
Run Code Online (Sandbox Code Playgroud)
这是在新西兰,夏令时执行(所以UTC + 13:00)
我得到的输出很奇怪:
5/10/2012 1:00:00 p.m. +13:00
5/10/2012 12:01:00 a.m. +00:00
5/10/2012 12:02:00 a.m. +00:00
5/10/2012 12:03:00 a.m. +00:00
5/10/2012 12:04:00 a.m. +00:00
5/10/2012 12:05:00 a.m. +00:00
5/10/2012 12:06:00 a.m. +00:00
5/10/2012 12:07:00 a.m. +00:00
5/10/2012 12:08:00 a.m. +00:00
5/10/2012 12:09:00 a.m. +00:00
Run Code Online (Sandbox Code Playgroud)
第一个日期/时间使用本地时区显示,其余时间以UTC显示,每个时间值增加1分钟,日期永远不会改变.
我觉得我可能会错过一些基本的日常时间间隔时间表,但我只是不知道它是什么?
编辑
作为执行此操作的更新,我现在已切换到使用基于CRON表达式的触发器:
TriggerBuilder.Create()
.WithCronSchedule(string.Format("0 {0} {1} ? * …Run Code Online (Sandbox Code Playgroud) 通过调度程序源代码(2.6.34,kernel/sched.c),我可以看到如何使用"可插拔"调度程序,我相信我理解要实现的接口.我还不明白的是如何将我的代码内置到内核中.至少,指向其他网站的指针将不胜感激.
现在,我正在内核源代码树中查找SCHED_FIFO,SCHED_RR和SCHED_NORMAL,所以我真的在寻找一种更有见地的方式来看待它:-)
编辑:作为一些背景,我对FreeBSD调度程序(以及一般的FreeBSD内核)非常熟悉,所以我不是在寻找关于如何进行进程/线程级调度的指针.我正在寻找一种方法来添加我自己的调度程序和普通的linux调度程序(类似于SCHED_FIFO).
编辑#2:下面的BFS指针是一个很好的开始,但它仍然将CFS从内核中删除.sched.c现在看起来像:
#ifdef CONFIG_SCHED_BFS
#include "sched_bfs.c"
#else
// original sched.c
#endif // CONFIG_SCHED_BFS
Run Code Online (Sandbox Code Playgroud)
我很乐意看到答案或指针如何更好地做到这一点(即保持CFS,至少目前为止).
编辑#3:我已经在下面回答了我自己的问题,因为我认为我已经弄明白了.
这是我长期以来一直存在的问题.作为一名教师和程序员的儿子,我很早就想到了......但我仍然没有找到解决方案.
所以这就是问题所在.人们需要使用一些约束为学校创建时间表.这些通常分为两类:
理智检查
喜好
现在,经过几年没有找到解决方案(同时学习一两件事),我意识到这就像一个NP难的问题.
它被证明是NP难吗?
有没有人知道如何破解这个东西?
看看这个问题让我想到了这个问题,以及在这种情况下遗传算法是否可用.然而,在保持理智检查规则的同时,很难改变可能性.我还不清楚如何区分不兼容的要求.
一个小的附录,以更好地说明问题.这适用于意大利学校风格的教室,所有学生都在不同的班级(例如:第1年A部分),教师在不同课程之间移动.同一班级的所有学生都有相同的时间表,并且无法选择参加哪些课程.
有人可以解释SCHED_OTHER,SCHED_FIFO和SCHED_RR之间的区别吗?
谢谢
我正在编写一个对延迟敏感的应用程序,它实际上想要一次等待多个条件变量.我之前已经阅读了几种在Linux上获得此功能的方法(显然这是在Windows上构建的),但它们似乎都不适合我的应用程序.我所知道的方法是:
让一个线程等待你想要等待的每个条件变量,当被唤醒时会发出一个你等待的单个条件变量.
通过定时等待循环遍历多个条件变量.
将虚拟字节写入文件或管道,然后轮询这些字节.
#1和#2不合适,因为它们会造成不必要的睡眠.使用#1,你必须等待虚拟线程唤醒,然后发出真实线程的信号,然后唤醒真正的线程,而不是真正的线程刚刚开始唤醒 - 额外的调度程序量子花费在这实际上对我的应用程序很重要,我宁愿不必使用完整的RTOS.#2更糟糕的是,你可能花费N*超时时间睡眠,或者你的超时将是0,在这种情况下你永远不会睡觉(无休止地烧掉CPU和饿死其他线程也很糟糕).
对于#3,管道是有问题的,因为如果"发出信号"的线程忙或甚至崩溃(我实际上处理的是单独的进程而不是线程 - 互斥和条件将存储在共享内存中),那么写入线程将被卡住,因为管道的缓冲区将是满的,任何其他客户端也是如此.文件存在问题,因为应用程序运行的时间越长,它就会无休止地增长.
有一个更好的方法吗?对于适用于Solaris的答案感到好奇.
我试图了解Linux如何处理进程调度和线程调度.我读到Linux可以安排进程和线程.
Linux有线程调度程序和进程调度程序吗?如果是,他们如何合作?
我需要管理ETL任务的大型工作流程,其执行取决于时间,数据可用性或外部事件.在执行工作流程期间,某些作业可能会失败,并且系统应该能够重新启动失败的工作流程分支,而无需等待整个工作流程完成执行.
python中有没有可以处理这个的框架?
我看到几个核心功能:
像Oozie这样的东西,但更通用的目的和python.
我有一个艰难的时间,了解各种方法之间的差异com.google.gwt.core.client.Scheduler接口,具体而言,scheduleDeferred,scheduleFinally,和scheduleIncremental方法.
我认为,由于我不熟悉调度程序文档所涉及的浏览器事件处理循环,因此我的理解受到了阻碍.
您能否解释一下这些方法之间的区别,以及它们如何与浏览器事件循环相关联?