![]() |
![]() ![]() |
![]() |
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 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Видшь, у тебя есть
Код while finished < 1 do; это называется почти бесконечный цикл. - он то как раз и жрёть всё время процессора. Для синхронизации испоьлзуются сигналы, события, мутексы, семафоры Думаю тут надо использовать события - event. Если ты пишешь под Win32, то прочитай про функции CreateEvent, WaitFor, PulseEvent, SetEvent, ResetEvent. Сообщение отредактировано: hardcase - 12.01.2006 14:10 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
virt, жестоко...
![]() program test; Выше 3% не поднимается... |
hardcase |
![]()
Сообщение
#4
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
А если грамотно использовать синхронизацию. то вообще использоване будет 0%
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
hardcase, я привел пример... Теперь твоя очередь... А то разглагольствовать, как я погляжу, вы все мастера
![]() Но не забудь, что автор просил без значительного усложнения программы. |
virt |
![]() ![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo,
методом проб и ошибок пришел к такому же результату:: Код 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. Только вопрос ,Sleep(100) задает остановку в 100 секунд или миллисекунд? Загрузка 0%(близка к 0) Сообщение отредактировано: virt - 12.01.2006 15:52 -------------------- |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Sleep задает время в ms...
Цитата(rtl.pdf) 29.12.157 Sleep Synopsis: Suspend execution of a program for a certain time. Declaration: procedure Sleep(milliseconds: Cardinal) Visibility: default |
hardcase |
![]()
Сообщение
#8
|
![]() 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 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Только без SysUtils, в FPC функция BeginThread описана в System...
|
hardcase |
![]()
Сообщение
#10
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
ок. щас уберу. да, я просто запамятовал - показалось что в Windows есть BeginThread - на самом деле там CreateThread.
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 19:28 |