Compare commits
1 Commits
44e87f1334
...
0ad2e86400
| Author | SHA1 | Date | |
|---|---|---|---|
| 0ad2e86400 |
@@ -1,61 +0,0 @@
|
|||||||
namespace WarhoundConsole
|
|
||||||
{
|
|
||||||
public abstract class Job
|
|
||||||
{
|
|
||||||
private readonly TimeSpan interval;
|
|
||||||
|
|
||||||
private Task task;
|
|
||||||
private DateTime lastExecutedTime;
|
|
||||||
|
|
||||||
public Job(TimeSpan interval)
|
|
||||||
{
|
|
||||||
if (interval <= TimeSpan.Zero)
|
|
||||||
{
|
|
||||||
throw new ArgumentOutOfRangeException(nameof(interval));
|
|
||||||
}
|
|
||||||
|
|
||||||
this.interval = interval;
|
|
||||||
this.task = Task.CompletedTask;
|
|
||||||
this.lastExecutedTime = DateTime.MinValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool TryExecute()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var now = DateTime.Now;
|
|
||||||
if (now - this.lastExecutedTime < this.interval)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.task.IsCompleted)
|
|
||||||
{
|
|
||||||
// 이 경우 로그를 출력하도록 하고, 타이밍을 조절해야한다.
|
|
||||||
//Console.WriteLine($"Job skipped at {DateTime.Now}");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.lastExecutedTime = now;
|
|
||||||
|
|
||||||
this.task = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await this.Execute();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Console.WriteLine(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract Task Execute();
|
|
||||||
|
|
||||||
public void Wait()
|
|
||||||
{
|
|
||||||
this.task?.Wait();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -24,18 +24,13 @@ namespace WarhoundConsole
|
|||||||
{
|
{
|
||||||
Singleton.I.Initialize(new());
|
Singleton.I.Initialize(new());
|
||||||
|
|
||||||
var jobs = new List<Job>();
|
|
||||||
|
|
||||||
var sw = Stopwatch.StartNew();
|
var sw = Stopwatch.StartNew();
|
||||||
while (!Singleton.I.ExitRequested)
|
while (!Singleton.I.ExitRequested)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
foreach (var job in jobs)
|
MainLoop();
|
||||||
{
|
|
||||||
_ = job.TryExecute();
|
|
||||||
}
|
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
|
|
||||||
const int targetFrameTimeMs = 10;
|
const int targetFrameTimeMs = 10;
|
||||||
@@ -50,17 +45,17 @@ namespace WarhoundConsole
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var job in jobs)
|
|
||||||
{
|
|
||||||
job.Wait();
|
|
||||||
}
|
|
||||||
|
|
||||||
Shutdown();
|
Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void MainLoop()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static void Shutdown()
|
private static void Shutdown()
|
||||||
{
|
{
|
||||||
// DO SOMETHING
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user