IPB
ЛогинПароль:

> потоки, Thread ,freepascal
virt
сообщение 12.01.2006 1:06
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


Код
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%. Как сделать чтобы не было такой загрузки? Suspend ,Resume? А без них можно?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
hardcase
сообщение 12.01.2006 16:13
Сообщение #2


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Вот пример синхронизации с помощью Event, я извиняюсь, ФриПаскаля под рукой нету, но думаю модуль Windows там есть. Тут вроде речь идёт о компилерах 32бит.

Код
program test;
{$threading on}
uses windows, sysutils ,crt;

var Event: cardinal;

function f1(p : pointer) : longint;
var S: string;
begin
   ReadLn(S);
   WriteLn('you entered ',S);
   SetEvent(Event);  //сигналим, можно юзать PulseEvent
   f1 := 0;
end;

begin
   Event:=CreateEvent(nil,true,false,nil);
   ResetEvent(Event);
   BeginThread(@f1);
   WaitForSingleObject(Event,INFINITE); //ждём сигнала
   ReadLn;
end.


Загрузка проца - 0 (ноль)%

Сообщение отредактировано: hardcase - 12.01.2006 16:46


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 19:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"