Полагаю, это должно сработать:
var processName = "devenv";
var active = Process.GetProcessesByName(searchName).OrderByDescending(x => x.Threads.OfType<ProcessThread>().Count(t => t.ThreadState != ThreadState.Wait)).FirstOrDefault();
главное - фильтрация по состоянию потока. Активный статус: t.ThreadState != ThreadState.Wait
просто упрощается.
для текущего запущенного приложения решение:
IntPtr hwnd = GetForegroundWindow();
uint pid;
GetWindowThreadProcessId(hwnd, out pid);
Process p = Process.GetProcessById((int)pid);
[DllImport("user32.dll")]
public static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out uint ProcessId);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
, но во втором примере определяется только текущий запущенный процесс приложения
Создание быстрого, точного и Стабильный решатель чрезвычайно сложен, и такие люди, как Хавок, по понятным причинам защищают технологию. Тем не менее, мне известны следующие бесплатные системы:
Я большой поклонник Bullet сам, но я Я слышал несколько разных жалоб по этому поводу. Большинство из них, кажется, сосредоточены вокруг плохой документации или случайных проблем на некоторых вторичных платформах, таких как Mac. Это был бы мой выбор после «Большой 2», Havok и PhysX.
Bullet бесплатен для коммерческого использования и имеются источники.
Документация может быть намного лучше, но есть форум и ряд примеров, которые могут помочь при начале работы.
Bullet потрясающая и использовалась в коммерческих целях (например: в производстве Bolt и нескольких игр для PS3 / Wii) имеет поддержку многих платформ и даже CUDA от nVidia.
На современном оборудовании, если вы наивно моделируете 1000 взаимодействующих твердых тел на процессоре x86, производительность начинает падать без исключения. Если вам нужна более высокая производительность прямо сейчас, то было бы лучше искать физические движки, которые переносят свою рабочую нагрузку на GPU.
CPU имеют большие целочисленные математические и логические возможности обработки, но GPU имеют гораздо большие необработанные вычислительные возможности с плавающей запятой.
Если вы все еще хотите повысить производительность, просто используя ЦП, вам придется изменить свои требования.
Nvidias ] PhysX не с открытым исходным кодом , но свободно доступен для Windows, Linux и PS3 .
Цитата из http://en.wikipedia.org/ вики / PhysX :
Nvidia бесплатно предоставляет как движок, так и SDK пользователям и разработчикам Windows и Linux [6]. SDK для PlayStation 3 также находится в свободном доступе в соответствии с соглашением Sony о покупке одеял.