я в основном нужно запустить этот код каждые 5 секунд или так:опросом процесс каждые X секунд с использованием низкой CPU
if (oneperone.HasExited)
{
oneperone.Start();
}
foreach (Process p in System.Diagnostics.Process.GetProcessesByName("WerFault"))
{
try
{
p.Kill();
p.WaitForExit(); // possibly with a timeout
}
catch (Win32Exception winException)
{
// process was terminating or can't be terminated - deal with it
}
catch (InvalidOperationException invalidException)
{
// process has already exited - might be able to let this one go
}
}
я пытался использовать таймер на примере здесь: http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx и Я попробовал запустить бесконечный цикл с командами ожидания системных потоков, но обе дают неприемлемую производительность, и команда ожидания системы, очевидно, блокирует поток, который мне нужен, чтобы делать другие вещи между 5-секундной итерацией
помните, что 5 секунд произвольно это может быть длиннее или короче. Мне просто нужно продолжать повторять этот код, но, надеюсь, у кого-то есть изящество решение?
Вы можете использовать параллельный foreach, чтобы одновременно остановить несколько процессов, и общее время выполнения будет короче –
@arcaine: что произойдет, если из 5 процессов будет обрабатываться 3-й, по какой-либо причине работает более 5 секунд? Должен ли он быть убит, чтобы другой начал? – Tigran
Я не уверен, что я понимаю ваш вопрос, oneperone - это программа, которая должна быть запущена все время, WerFault - это процесс сбоя, вы не можете выполнить однопроцессорный процесс онлайн, если он разбился, потому что .HasExited не запускается во время crash to side step this, я проверяю процесс сбоя и убиваю его, чтобы разрешить новую перезагрузку – arcanine