W
WoD
Необходимо прервать выполнение некоторой функции, если она выполняется дольше определённого времени.
я нашел решение: это создавать поток, и в нём выполнять функцию, и если поток не просигнализировал о завершении - то прерывать его.
но так как это необходимо делать до 1000 раз в секунду - то создание нового потока каждый раз очень сильно замедляет работу
кто-нибудь может подсказать как это сделать по другому?
п.с.
я пробовал делать с помощью асинхронных вызовов делегатов - это не замедляет работу, но я не знаю как прервать их выполнение, если они выполняются слишком долго.
пробовал через ThreadPool - та же проблема.
думаю, что как-то можно повторно использовать уже созданный поток(передав ему как-то другие параметры, или через статические переменные), но у меня не получилось.
я нашел решение: это создавать поток, и в нём выполнять функцию, и если поток не просигнализировал о завершении - то прерывать его.
Код:
private static EventWaitHandle ewh = new EventWaitHandle(false, EventResetMode.AutoReset);
[MTAThread]
public static void Main()
{
bool b = false;
Thread t;
for (int i = 0; i < 1000; i++ )
{
t = new Thread(new ParameterizedThreadStart(ThreadTest));
t.Start(1000000);
b = ewh.WaitOne(100, true);
if (!b) t.Abort();
}
}
public static void ThreadTest(object data)
{
//do some work
ewh.Set();
}
но так как это необходимо делать до 1000 раз в секунду - то создание нового потока каждый раз очень сильно замедляет работу
кто-нибудь может подсказать как это сделать по другому?
п.с.
я пробовал делать с помощью асинхронных вызовов делегатов - это не замедляет работу, но я не знаю как прервать их выполнение, если они выполняются слишком долго.
пробовал через ThreadPool - та же проблема.
думаю, что как-то можно повторно использовать уже созданный поток(передав ему как-то другие параметры, или через статические переменные), но у меня не получилось.