是否有一种算法可以安排重叠的 turn-on/turn-off 命令?
Is there an algorithm to schedule overlapping turn-on/turn-off commands?
我要解决的问题如下:
每个任务(绿色条)代表一对打开(绿色虚线)和关闭(红色虚线)命令。任务可能会或可能不会相互重叠。这是一个实时应用程序,我们不知道何时或是否有另一项任务到来。目标是在阀门尚未打开时将其打开,并避免过早关闭阀门。
我说的不要过早关阀的意思是,比如我们在off-1时间关阀,那是错误的,因为那个时间点阀应该还是开着的,正确的做法是在时间 off-4 关闭阀门。
关于实现细节,每个任务都是一个异步任务(via.GLib async API)。我用睡眠功能模拟等待任务持续时间,计时器可能更合适。现在,任务 运行 独立,它们之间没有协调,因此阀门过早关闭。
我四处寻找类似的问题,但我找到的最接近的是目标不同的间隔调度。以前有没有人遇到过类似的问题,可以给我一些解决这个问题的建议吗?
看来这可以通过一个简单的计数器来解决。您为每个打开命令递增计数器,并为每个关闭命令递减计数器 - 当计数达到零时,您关闭阀门。
我要解决的问题如下:
每个任务(绿色条)代表一对打开(绿色虚线)和关闭(红色虚线)命令。任务可能会或可能不会相互重叠。这是一个实时应用程序,我们不知道何时或是否有另一项任务到来。目标是在阀门尚未打开时将其打开,并避免过早关闭阀门。
我说的不要过早关阀的意思是,比如我们在off-1时间关阀,那是错误的,因为那个时间点阀应该还是开着的,正确的做法是在时间 off-4 关闭阀门。
关于实现细节,每个任务都是一个异步任务(via.GLib async API)。我用睡眠功能模拟等待任务持续时间,计时器可能更合适。现在,任务 运行 独立,它们之间没有协调,因此阀门过早关闭。
我四处寻找类似的问题,但我找到的最接近的是目标不同的间隔调度。以前有没有人遇到过类似的问题,可以给我一些解决这个问题的建议吗?
看来这可以通过一个简单的计数器来解决。您为每个打开命令递增计数器,并为每个关闭命令递减计数器 - 当计数达到零时,您关闭阀门。