Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2007, 00:57   #1
Zuzlan
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 19
Вопрос Альтернатива sleep

Здравствуйте, уважаемые.
Знаю что тема заезжена, но вот ответа который бы меня устроил я так и не нашел.

Скажем есть цикл

while not OK do
begin
// {сюда нужно что то, что приостановило бы работу текущего потока, НО не подвесило работу основного процесса (sleep отпадает), не грузило бы процессор под завязку (application.ProcessManager отпадает) и при этом не влияло на работу остальных потоков.}
end


Есть у кого то предложения по этому поводу?

За ранее большое спасибо за _полезные_ ответы!
Zuzlan вне форума Ответить с цитированием
Старый 01.11.2007, 01:43   #2
Zuzlan
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 19
По умолчанию

Выяслин, что synhronize, который я использовал - это зло.

Благодарю за внимание. Тема закрыта
Zuzlan вне форума Ответить с цитированием
Старый 01.11.2007, 01:44   #3
Zuzlan
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 19
По умолчанию

А вот собственно по теме:

Автор 7inner

Итак, открываем какой нибуть фак:
1)

procedure Delay(Milliseconds: Integer);
{by Hagen Reddmann}
var
Tick: DWord;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := GetTickCount + DWord(Milliseconds);
while (Milliseconds > 0) and
(MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
Milliseconds := Tick - GetTickcount;
end;
finally
CloseHandle(Event);
end;
end;


2)

procedure PauseFunc(delay: DWORD);
var
lTicks: DWORD;
begin
lTicks := GetTickCount + delay;
repeat
Sleep(100);
Application.ProcessMessages;
until (lTicks <= GetTickCount) or Application.Terminated;
end;


3)SleepEx
4)

procedure Delay(msecs: Longint);
var
targettime: Longint;
Msg: TMsg;
begin
targettime := GetTickCount + msecs;
while targettime > GetTickCount do
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
If Msg.message = WM_QUIT Then
begin
PostQuitMessage(msg.wparam);
Break;
end;
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

{
Note:
The elapsed time is stored as a DWORD value.
Therefore, the time will wrap around to zero if the system is
run continuously for 49.7 days.
}



На самом деле все реализации демонструют то, что лучше чем Sleep/SleepEx/Application.processmessages нет
Zuzlan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Альтернатива Microsoft Office Access Лубышев Софт 10 14.05.2009 08:45
Альтернатива Image Pedro Компоненты Delphi 6 21.02.2008 12:38
Альтернатива DbChart Nemon Компоненты Delphi 6 17.10.2007 19:01
Альтернатива WriteFile Egor2005 Win Api 3 11.04.2007 20:11