No puede hacerse de la manera que lo describís, pero si puede hacerse.
Cada hilo puede tener una mascara de afinidad con CPU's diferente. El sistema utiliza esa mascara para asignar los hilos con diferentes cpu's.
Esta mascara se establece llamando a la función SetThreadAffinityMask, declarada en la unidad Windows.
En
delphi3000, encontré
este artículo, que te provee de una clase que ya encapsula esto en una propiedad.
Código Delphi
[-]
unit ExThread;
interface
uses
Classes;
type
TExThread = class(TThread)
private
FAffinityMask: DWord;
procedure SetAffinity(const Value: DWord);
protected
procedure Execute; override;
public
property AffinityMask : DWord read FAffinityMask write SetAffinity;
end;
implementation
procedure TExThread.Execute;
begin
end;
procedure TExThread.SetAffinity(const Value: DWord);
begin
FAffinityMask := SetThreadAffinityMask(Handle,Value);
if FAffinityMask = 0 then raise Exception.Create('Error setting thread affinity mask : ' + IntToStr(GetLastError));
end;
end.
La mascara de afinidad, es un mapa de bits, donde el bit 1 se corresponde con el cpu 0
así, si queres que un hilo se ejecute solamente en el cpu 3 (de una core 2 quad, por ejemplo), la mascara de afinidad será $8 (en delphi) o 0x8 (en c).
Hasta luego.