ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Аналог sleep в дельфи
  #1  
Старый 20.09.2009, 00:09
2pick
Познающий
Регистрация: 17.03.2007
Сообщений: 98
Провел на форуме:
193152

Репутация: 45
Отправить сообщение для 2pick с помощью ICQ
По умолчанию Аналог sleep в дельфи

Нигде не нашел ответа... Может кто поможет. Ситуация следующая - в потоке (поток зациклен) произвожу действия и дальше нужно сделать паузу и менно в потоке - sleep как я понял весит всю прогу на слип. Ибо когда делаю слип 5 секунд то прога тупить начинает. Каким образом можно сделать задержку именно в потоке?

Код:
procedure Thread.Execute;
begin
while true do
begin
Synchronize(DoWork);
sleep(500);
end;
end;

З.Ы.: прога не оконная (точнее окна создаются через API) поэтому как я понял TTimer не подходит

Последний раз редактировалось 2pick; 20.09.2009 в 00:11..
 
Ответить с цитированием

  #2  
Старый 20.09.2009, 00:29
Dosia
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
Провел на форуме:
1313455

Репутация: 249
По умолчанию

WaitForSingleObject(GetCurrentThread(), 5000);
 
Ответить с цитированием

  #3  
Старый 20.09.2009, 01:27
2pick
Познающий
Регистрация: 17.03.2007
Сообщений: 98
Провел на форуме:
193152

Репутация: 45
Отправить сообщение для 2pick с помощью ICQ
По умолчанию

Спасибо, только еще хуже стало
на 1 секунде уже всю систему весит... А вот слип 1 секунду нормально отрабатывает.

Кстати прога тупить начинает именно веся всю систему. Точнее системные сочетения кнопок работают Alt+Tab, Ctrl+Alt+Delete
А вот рабочий стол со всем содержимым впадает в ступор.
Форма отрисовывется, а вот скрытие ее не срабатывает.

Последний раз редактировалось 2pick; 20.09.2009 в 01:35..
 
Ответить с цитированием

  #4  
Старый 20.09.2009, 10:31
Sams
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
Провел на форуме:
435863

Репутация: 80
По умолчанию

Не знаю, может поможет:

Код:
>> Процедура Delay (как в паскале)

Зависимости: Forms,Windows,SysUtils
Автор:       demon-777, demon-777@yandex.ru, Питер
Copyright:   Выдрана из RxLib
Дата:        23 мая 2002 г.
***************************************************** }

{Delay, не загружающий процессор}

procedure Delay(Value: Cardinal);
var
  F, N: Cardinal;
begin
  N := 0;
  while N <= (Value div 10) do
  begin
    SleepEx(1, True);
    Application.ProcessMessages;
    Inc(N);
  end;
  F := GetTickCount;
  repeat
    Application.ProcessMessages;
    N := GetTickCount;
  until (N - F >= (Value mod 10)) or (N < F);
end;
Пример использования: 
Delay(1000); //Задержка на одну секунду
Цитата:
прога не оконная
Ой, sorry, протупил, значит не поможет
 
Ответить с цитированием

  #5  
Старый 20.09.2009, 10:50
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

ппц вы гении. Автор, у тебя чтото с кодом наверное, а не с функций Sleep. Потому что она останавливает выполнение потока из которого она выполнена.

Вырезка из MSDN
Цитата:
The Sleep function suspends the execution of the current thread for a specified interval.
Вполне возможно это из-за того что ты сделал потоки на основе класса TThread. Попробуй потоки на WinAPI организовать - CreateThread

Последний раз редактировалось slesh; 20.09.2009 в 14:05..
 
Ответить с цитированием

  #6  
Старый 21.09.2009, 12:54
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

не морочь голову с TThread и тд а создавай новый поток через апи CreateThread. используй в процедуре обработки апи Sleep() и все будет впорядке.

вот пример, правда на си

Код:
DWORD WINAPI TypingThread(LPVOID arg)
{
	for(int i=0; i<5; i++){
		printf("Xaxaxa\r\n");
		Sleep(2000);
	}

	printf("thread end\r\n");
	return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE  hthread;
	DWORD	tid;
		
	hthread = CreateThread(0,0,TypingThread,NULL,0,&tid);
	
	for(int i=0; i<15; i++){
		printf("tmain()\r\n");
		Sleep(1000);
	}

	printf("program end\r\n");
	return 0;
}
вывод:

c:\123123\Debug>123123
tmain()
Xaxaxa
tmain()
Xaxaxa
tmain()
tmain()
Xaxaxa
tmain()
tmain()
tmain()
Xaxaxa
tmain()
Xaxaxa
tmain()
tmain()
thread end
tmain()
tmain()
tmain()
tmain()
tmain()
program end

c:\123123\Debug>

Последний раз редактировалось sn0w; 21.09.2009 в 13:33..
 
Ответить с цитированием

  #7  
Старый 24.09.2009, 19:28
M_script_
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме:
1819761

Репутация: 180
Отправить сообщение для M_script_ с помощью ICQ
По умолчанию

В чем-то другом проблема. Sleep() в созданном потоке не влияет на работу основного.
Только почему ты пишешь "делаю слип 5 секунд", а в коде Sleep(500) - полсекунды?

Цитата:
Сообщение от 2pick  
З.Ы.: прога не оконная (точнее окна создаются через API) поэтому как я понял TTimer не подходит
Это ты неправильно понял, VCL можно использовать в консольных прогах.
 
Ответить с цитированием

  #8  
Старый 25.09.2009, 13:03
jaypi
Познающий
Регистрация: 19.08.2009
Сообщений: 44
Провел на форуме:
128359

Репутация: 2
По умолчанию

а если
Код:
   Sleep(500);
   Application.ProcessMessages;
 
Ответить с цитированием

  #9  
Старый 26.09.2009, 09:37
Пуховой
Banned
Регистрация: 25.11.2007
Сообщений: 62
Провел на форуме:
1702086

Репутация: 89
По умолчанию

jaypi, ага, или for i:=1 to 1000 do sleep (5);

2pick, как ни крути, не будет неосновной поток вешать систему. В том вся и прелесть.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема со Sleep в PHP ttt0z Болталка 12 02.08.2009 18:55
Аналог img src ttt0z Болталка 6 24.06.2009 12:59
Прервать sleep в PHP xssww2 PHP, PERL, MySQL, JavaScript 3 26.05.2009 23:30
Исходники криптора на дельфи 7ion С/С++, C#, Delphi, .NET, Asm 23 14.09.2008 13:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ