![]() |
![]() |
virt |
![]() ![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код 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? А без них можно? -------------------- |
![]() ![]() |
hardcase |
![]()
Сообщение
#2
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Вот пример синхронизации с помощью 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 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 19:42 |