TimeOut на вычесления
От: Duke_Nuken Украина  
Дата: 08.03.06 11:01
Оценка:
Задача стоит так. У меня есть некая функция которая производит
расчет. Что именно она делает не важно, важно время выполнения — если
расчет длиться больше 5 секунд значение уже не правильное.

мне нужно получить от функции получить от алгоритма true или false.
Схематично это выглядит примерно так.

bool Work(int value)
{
  ==>> ХИТРЫЕ вычисления << ===

  return true или false;
}
...
bool res = WorkThread(12);


И если функция выполняеться больше 5 секунд, завершать ее и возвращать false.
Как это проще сделать?
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
Re: TimeOut на вычесления
От: VladGalkin Украина  
Дата: 08.03.06 11:04
Оценка:
Здравствуйте, Duke_Nuken, Вы писали:

D_N>И если функция выполняеться больше 5 секунд, завершать ее и возвращать false.

D_N>Как это проще сделать?

Mutex, WaitHanlde и набор Wait-методов, например:
public virtual bool WaitOne ( TimeSpan timeout, bool exitContext )

спасёт отца русской демократии
... << RSDN@Home 1.1.4 stable rev. 510>>
ДЭ!
Re[2]: TimeOut на вычесления
От: Duke_Nuken Украина  
Дата: 08.03.06 11:27
Оценка:
Здравствуйте, VladGalkin, Вы писали:

VG>Mutex, WaitHanlde и набор Wait-методов, например:

VG>
VG>public virtual bool WaitOne ( TimeSpan timeout, bool exitContext )
VG>

VG>спасёт отца русской демократии

Ух ты. Я не силен в таких вещах. Можно маленький примерчик как это должно работать?
    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.
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
Re[3]: TimeOut на вычесления
От: VladGalkin Украина  
Дата: 08.03.06 11:40
Оценка: 1 (1)
Здравствуйте, 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();
    }
}
... << RSDN@Home 1.1.4 stable rev. 510>>
ДЭ!
Re[4]: TimeOut на вычесления
От: Duke_Nuken Украина  
Дата: 08.03.06 12:03
Оценка:
Bax! +1
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
Re[5]: TimeOut на вычесления
От: VladGalkin Украина  
Дата: 08.03.06 12:09
Оценка:
Здравствуйте, Duke_Nuken, Вы писали:

D_N>Bax! +1


Двэсты, да?!
... << RSDN@Home 1.1.4 stable rev. 510>>
ДЭ!
Re: TimeOut на вычесления
От: TK Лес кывт.рф
Дата: 08.03.06 20:07
Оценка: 6 (1)
Hello, "Duke_Nuken"
>
> И если функция выполняеться больше 5 секунд, завершать ее и возвращать false.
> Как это проще сделать?

Выполнение запускается в отдельном потоке. Потом, делается следующее:
if (!funcThread.Join(new TimeOut(0, 0, 5)))
{
    funcThread.Abort();
}
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.