[英]C#: Measure time taken and exit function when time elapsed
我想运行一个函数( funcA
)并使用另一个函数( timerFunc
)作为计时器。 如果正在运行的功能( funcA
)已运行10秒钟,我想使用计时器功能( timerFunc
)退出。 这可能吗? 基本上我想做的是:
void funcA() {
// check event 1
// check event 2
// check event 3
// time reaches max here! --exit--
//check event 4
}
如果没有,处理这种情况的最佳方法是什么? 我已经考虑过使用秒表,但是我不确定这是否是最好的选择,主要是因为我不知道在什么情况下会达到超时。
Thread t = new Thread(LongProcess);
t.Start();
if (t.Join(10 * 1000) == false)
{
t.Abort();
}
//You are here in at most 10 seconds
void LongProcess()
{
try
{
Console.WriteLine("Start");
Thread.Sleep(60 * 1000);
Console.WriteLine("End");
}
catch (ThreadAbortException)
{
Console.WriteLine("Aborted");
}
}
您可以将所有事件放入Action数组或其他类型的委托中,然后遍历列表并在适当的时间退出。
或者,在后台线程或Task或某些其他线程机制中运行所有事件,并在达到适当时间后中止/退出线程。 硬终止是一个错误的选择,因为它可能导致泄漏或死锁,但是您可以在适当的时候检查CancellationToken或其他内容。
我会先创建一个列表,然后再创建快速书签:
class Program
{
static private bool stop = false;
static void Main(string[] args)
{
Timer tim = new Timer(10000);
tim.Elapsed += new ElapsedEventHandler(tim_Elapsed);
tim.Start();
int eventIndex = 0;
foreach(Event ev in EventList)
{
//Check ev
// see if the bool was set to true
if (stop)
break;
}
}
static void tim_Elapsed(object sender, ElapsedEventArgs e)
{
stop = true;
}
}
这应该适用于简单的情况。 如果更复杂,我们可能需要更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.