.NET中的“start / affinity”等价物

时间:2010-06-04 18:04:46

标签: c# .net windows multithreading winapi

start Windows shell命令(在cmd.exe中)似乎能够启动 选择处理器关联的进程,而不是启动进程然后在启动后的某个(小)时间内设置所选的处理器关联。

start /affinity 2 something.exe

有没有办法在使用或不使用P-Invoke的.NET应用程序中执行相同的操作?呼叫cmd.exe /C start ...并不重要。

Process类具有ProcessorAffinity属性,但如果您在调用InvalidOperationException方法之前尝试设置它,则会抛出Start

2 个答案:

答案 0 :(得分:4)

我怀疑start命令在这种情况下做的是启动进程暂停(即,在调用CreateProcess时传递CREATE_SUSPENDED),然后设置处理器亲和性,然后恢复线程。

这样,虽然进程存在而没有设置进程关联,但是当它启动执行时,已经设置了处理器关联,所以它只运行在指定的处理器上。

答案 1 :(得分:1)

我认为您不能在启动流程之前设置处理器关联,因为SetProcessAffinityMask Function的第一个参数是处理流程的。

另一方面,有一个名为Imagecfg的程序允许永久设置可执行文件的处理器关联,但我不确定它是如何工作的。