ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

24.05.2010, 16:44
|
|
Постоянный
Регистрация: 02.07.2008
Сообщений: 472
Провел на форуме: 3728999
Репутация:
444
|
|
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
первая часть программы :=false:
Timer2.Enabled:= True;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
вторая часть программы :=true:
Timer1.Enabled:= false;
Timer2.Enabled:= false;
end;
останется только настроить интервал для таймера
|
|
|

24.05.2010, 17:16
|
|
Познающий
Регистрация: 13.04.2010
Сообщений: 66
Провел на форуме: 183788
Репутация:
2
|
|
А вот те слип при котором не бует зависонов )
Код:
int time=GetTickCount();
while((GetTickCount()-time)<1000))//Или меняй задержку на свою
{
Application->ProcessMessages();
}
|
|
|

24.05.2010, 17:20
|
|
Новичок
Регистрация: 11.07.2009
Сообщений: 20
Провел на форуме: 39998
Репутация:
2
|
|
function proc(): integer;
begin
Sleep(Твое время задержки);
//Твои действия "второй части" (потока).
result:= 0;
end;
var id: DWORD;
begin
CreateThread(nil, 0, @proc, nil, 0, id);
//Твои действия "первой части" (потока);
//Если эта часть кода может выполниться за время (или раньше), которое ты поставил в Sleep выше, то раскоменировать след.строку и возложить завершение проги на второй поток (функцию proc).
//Sleep(infinite);
end.
Вариант 2:
function proc(): integer;
begin
Sleep(Твое время задержки);
//Твои действия "второй части" (потока).
result:= 0;
end;
var id: DWORD;
h: THandle;
begin
h:= CreateThread(nil, 0, @proc, nil, 0, id);
//Твои действия "первой части" (потока);
WaitForSingleObject(h, infinite); //ждем завершения созданного потока.
end.
Последний раз редактировалось Faost; 24.05.2010 в 21:19..
|
|
|

24.05.2010, 20:14
|
|
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме: 1229135
Репутация:
425
|
|
ппц... вы тут такие вещи творите....
Ildon, Нельзя на это полагаться, еще раз повторяю
|
|
|

24.05.2010, 20:46
|
|
Познающий
Регистрация: 13.04.2010
Сообщений: 66
Провел на форуме: 183788
Репутация:
2
|
|
Сообщение от AlexTheC0d3r
ппц... вы тут такие вещи творите....
Ildon, Нельзя на это полагаться, еще раз повторяю
Скоко раз так делал все нормально было
|
|
|

24.05.2010, 20:58
|
|
Новичок
Регистрация: 11.07.2009
Сообщений: 20
Провел на форуме: 39998
Репутация:
2
|
|
Сообщение от AlexTheC0d3r
ппц... вы тут такие вещи творите....
Ildon, Нельзя на это полагаться, еще раз повторяю
1. Скажи, что плохого в этих "вещах" и приведи пример.
2. Предложи лучший вариант.
3. Без выполнения пунктов 1 и 2 не нужно говорить того, что ты говоришь, ибо это тебя не красит как человека, разбирающегося в этих "вещах".
|
|
|

24.05.2010, 21:24
|
|
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме: 1229135
Репутация:
425
|
|
Во-первых, в функции потока необходимо
Во-вторых, и чтобы не было этого бредового
, есть специальная функция
Скоко раз так делал все нормально было
Если ты так делал, и было нормально, это совсем не означает что это правильно!
Еще раз повторяю, нет гарантии, что
будет выполняться определенное время/
Надеюсь теперь понятно.
UPD:
function proc(): integer;
begin
Sleep(Твое время задержки);
//Твои действия "второй части" (потока).
result:= 0;
end;
var id: DWORD;
h: THandle;
begin
h:= CreateThread(nil, 0, @proc, nil, 0, id);
//Твои действия "первой части" (потока);
WaitForSingleObject(h, infinite); //ждем завершения созданного потока.
end.
где? Иначе программа никогда не завершится
Последний раз редактировалось AlexTheC0d3r; 24.05.2010 в 21:27..
|
|
|

24.05.2010, 21:45
|
|
Новичок
Регистрация: 11.07.2009
Сообщений: 20
Провел на форуме: 39998
Репутация:
2
|
|
AlexTheC0d3r,
Во-первых, в функции потока необходимо ExitThread(0);
Завершение рабочего потока выполняется просто: нужно просто завершить контролирующую функцию и возвратить значение, обозначающее причину завершения потока. Для этого можно использовать оператор return. (с) msdn.
Далее.
Я не вижу от тебя примера, где бы return (result) давал сбой, да и в msdn ясно написано, что return вполне подходит для выхода из потока. WTF?
есть специальная функция WaitForSingleObject();
смотри в моем посте вариант 2 (дописал ранее твоего поста). Однако и тут я не вижу от тебя примера, которым бы ты показал, что Sleep(infinite) - бредовый.
ExitThread(0); где? Иначе программа никогда не завершится
дружище, посмотри на тему, там присутствует слово Delphi. Borland`овские кодеры взяли этот вопрос на себя.
Прошу еще раз обратить внимание на 3ий пункт моего пред.поста.
Последний раз редактировалось Faost; 24.05.2010 в 21:50..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|