Модератор: Модераторы

A thread affinity mask must be a subset of the process affinity mask for the containing process of a thread. A thread can only run on the processors its process can run on. Therefore, the thread affinity mask cannot specify a 1 bit for a processor when the process affinity mask specifies a 0 bit for that processor
program project1;
{$mode delphi}{$H+}
uses
  Windows, Classes, SysUtils;
var
  pm, sm : DWORD;
  l   : DWORD;
  res  : DWORD;
begin
  GetProcessAffinityMask( GetCurrentProcess, pm, sm);
  writeln('Process Id:   ', GetCurrentProcessId );
  writeln('Process Mask: ', IntToHex(pm, 8));
  writeln('System  Mask: ', IntToHex(sm, 8));
  l:=1;
  while (l<>0) and (l and pm = 0) do l:=l shl 1;
  if l = 0 then begin
    writeln('epic fail... no processors?');
    Halt(1);
  end;
  res:=SetThreadAffinityMask( GetCurrentThread, l and pm); // Новая маска для потока AND маска для процесса
  if res=0 then
    writeln('Error! ', GetLastError)
  else begin
    writelN('Thread mask was: ', INtToHex(res,8));
    writelN('Thread mask new: ', IntToHex(l, 8));
  end;
end.
program project1;
{$mode delphi}{$H+}
uses
  Windows, Classes, SysUtils;
var
  pm, sm : DWORD;
  l   : DWORD;
  res  : DWORD;
begin
  GetProcessAffinityMask( GetCurrentProcess, pm, sm);
  writeln('Process Id:   ', GetCurrentProcessId );
  writeln('Process Mask: ', IntToHex(pm, 8));
  writeln('System  Mask: ', IntToHex(sm, 8));
  writeln('First try:');
  l:=1;
  while (l<>0) and (l and pm = 0) do l:=l shl 1;
  if l = 0 then begin
    writeln('epic fail... no processors?');
    Halt(1);
  end;
  res:=SetThreadAffinityMask( GetCurrentThread, l and pm); // Новая маска для потока AND маска для процесса
  if res=0 then
    writeln('Error! ', GetLastError)
  else begin
    writelN('Thread mask was: ', INtToHex(res,8));
    writelN('Thread mask new: ', IntToHex(l, 8));
  end;
  writeln('Second try:');
  l:=l shl 1;
  while (l<>0) and (l and pm = 0) do l:=l shl 1;
  if l = 0 then begin
    writeln('no more processors to play :(');
    Halt(1);
  end;
  res:=SetThreadAffinityMask( GetCurrentThread, l and pm);
  if res=0 then
    writeln('Error! ', GetLastError)
  else begin
    writelN('Thread mask was: ', INtToHex(res,8));
    writelN('Thread mask new: ', IntToHex(l, 8));
  end;
end.

CRobin писал(а):функция GetCurrentThread понимается как не объявлена
допустимCRobin писал(а):скалогрыз это нужно для корретной работы таймера при измерении малых отрезков времени.
CRobin писал(а):скалогрыз у меня кросплатформенное решение на основе RDTSC
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1