Код: Выделить всё
program test;
{$threading on}
uses sysutils;
var finished : longint;
function f1(p : pointer) : longint;
begin
readln;
InterLockedIncrement(finished);
f1 := 0;
end;
begin
finished := 0;
BeginThread(@f1);
while finished < 1 do;
end.
Загрузка - 96-98%
Код: Выделить всё
program test;
{$threading on}
uses sysutils ,crt;
var finished : longint;
function f1(p : pointer) : longint;
begin
while not keypressed do Sleep(10);
InterLockedIncrement(finished);
f1 := 0;
end;
begin
finished := 0;
BeginThread(@f1);
{Sleep(10);}
while finished < 1 do;
end.
Sleep(10) по документации в винде должна остановить всю программу(не поток) на 10 секунд ,однако 0 эффекта при любом вызове(в комментарии).
Остановка потока (fpSleep ,fpNanoSleep) работают под линь(uses BaseUnix ,OldLinux) ,работают они реально или нет не проверял (компилера под линь нет ,позже проверю). Эквивалентов этих функций под винду не нашел.
Код: Выделить всё
program test;
{$threading on}
uses sysutils ,crt;
var finished : longint;
function f1(p : pointer) : longint;
begin
while not keypressed do;
InterLockedIncrement(finished);
f1 := 0;
end;
begin
finished := 0;
{ BeginThread(@f1);}
while finished < 1 do;
end.
Загрузка - 96-98%
Код: Выделить всё
program test;
{$threading on}
uses sysutils ,crt;
var finished : longint;
function f1(p : pointer) : longint;
begin
while not keypressed do;
InterLockedIncrement(finished);
f1 := 0;
end;
begin
finished := 0;
BeginThread(@f1);
while finished < 1 do Sleep(1);
end.
Загрузка - 33-52%
Код: Выделить всё
program test;
{$threading on}
uses sysutils ,crt;
var finished : longint;
function f1(p : pointer) : longint;
begin
while not keypressed do Sleep(1);
InterLockedIncrement(finished);
f1 := 0;
end;
begin
finished := 0;
BeginThread(@f1);
while finished < 1 do Sleep(1);
end.
Загрузка - 0%(почти 0)