Задача стоит так. У меня есть некая функция которая производит
расчет. Что именно она делает не важно, важно время выполнения — если
расчет длиться больше 5 секунд значение уже не правильное.
мне нужно получить от функции получить от алгоритма true или false.
Схематично это выглядит примерно так.
bool Work(int value)
{
==>> ХИТРЫЕ вычисления << ===
return true или false;
}
...
bool res = WorkThread(12);
И если функция выполняеться больше 5 секунд, завершать ее и возвращать false.
Как это проще сделать?
Ух ты. Я не силен в таких вещах. Можно маленький примерчик как это должно работать?
class Program
{
public virtual bool WaitOne(TimeSpan timeout, bool exitContext)
{
Thread.Sleep(10000);
return true;
}
static void Main(string[] args)
{
TimeSpan time = new TimeSpan(0, 0, 5);
Program pr = new Program();
bool res = pr.WaitOne(time, false);
}
}
Вот обращение к функции WaitOne и параметр TimeSpan равен 5 секунд.
Функция выполняеться 10 секунд и должна соответственно быть оставновлена
и в return возвращен exitContext.
Здравствуйте, Duke_Nuken, Вы писали:
D_N>Ух ты. Я не силен в таких вещах. Можно маленький примерчик как это должно работать?
К Вашим услугам:
using System;
using System.Threading;
class WaitOne
{
static AutoResetEvent autoEvent = new AutoResetEvent(false);
static void Main()
{
Console.WriteLine("Main starting.");
ThreadPool.QueueUserWorkItem(
new WaitCallback(WorkMethod), autoEvent);
// Wait for work method to signal.if(autoEvent.WaitOne(1000, false))
{
Console.WriteLine("Work method signaled.");
}
else
{
Console.WriteLine("Timed out waiting for work " +
"method to signal.");
}
Console.WriteLine("Main ending.");
}
static void WorkMethod(object stateInfo)
{
Console.WriteLine("Work starting.");
// Simulate time spent working.
Thread.Sleep(new Random().Next(100, 2000));
// Signal that work is finished.
Console.WriteLine("Work ending.");
((AutoResetEvent)stateInfo).Set();
}
}