Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

Процедура sleep   Найти похожие ветки 

 
hgd   (2007-07-09 19:50) [0]

Подскажите, необходимо выполнить остановку процедуры на 10 сек. Процедура sleep(10000) "загружает" все процессы в компьютере и не дает им выполяться. Есть способ обойти это?


 
Gydvin ©   (2007-07-09 19:55) [1]


> "загружает" все процессы в компьютере и не дает им выполяться.
>  Есть способ обойти это?

чегоооо она делает!?!?!?


 
Инс ©   (2007-07-09 19:55) [2]


> Процедура sleep(10000) "загружает" все процессы в компьютере
> и не дает им выполяться.


Полнейший бред. Где вы это вычитали? Sleep говорит планировщику не выделять кванты процессорного времени вызывающему потоку в течении указанного периода.


 
AZIZE ©   (2007-07-09 19:58) [3]

компонент Timer попробуй


 
Юрий Зотов ©   (2007-07-09 20:41) [4]

> Процедура sleep(10000) "загружает" все процессы в компьютере и не дает
> им выполяться.

Снова пожинаем плоды чтения макулатуры.

На этот раз - М. Фленов, "Delphi глазами хакера".


 
palva ©   (2007-07-09 20:45) [5]

Неужели он такое пишет? Надо будет приобрести эту книженцию.


 
Инс ©   (2007-07-09 20:57) [6]


> Неужели он такое пишет? Надо будет приобрести эту книженцию.


Он и не такое пишет, вот замеченные мной ошибки при беглом просмотре.

Стр. 18-19.
"Большой объем, который появляется даже у пустой программы, как раз и связан с объектом Application, который объявлен в модуле Forms. Хотя мы использовали только два метода Initialize и Run, при компиляции в exe-файл попадает весь объект TApplication, а он состоит из сотен, а может и тысяч строчек кода."


Во-первых, это TApplication – это класс, а не объект, ну да ладно, сочтем это опечаткой. Ну а вот утверждение, что в exe попадет весь код данного класса не совсем верно. Тут нужно знать особенность формата dcu. Его основное отличие от стандартного объектного файла в том, при компоновки, в exe включается не все содержимое dcu, а лишь то, что непосредственно используется в программе. В этом легко убедиться, сравнив размер exe и суммарный размер составляющего его dcu. Однако из правила “включается непосредственно то, что используется” есть исключения. В частности, всегда включаются в exe методы позднего связывания (объявленные с директивой dynamic, virtual, message) а также все, что объявлено в разделе published. Первые – из-за того, что на этапе компиляции не известно, будут ли они вызваны (на то они и методы позднего связывания), а вторые – из-за того, что также могут быть получены впоследствии неявно с помощью RTTI (run-time type information). А большой объем кода – не столько из-за модуля Forms, а из-за всего, что он за собой подтягивает.

Стр. 21.
"Здесь объявлена недокументированная процедура RegisterServiceProcess, которая есть в ядре kernel32.dll. Эта процедура делает нашу программу процессом в системе Windows 9x."


Ух. Даже не знаю с чего начать. Ну, во-первых, вполне документированная. В Platform SDK нужно чаще заглядывать. Вот ссылочка на документацию на сайте Microsoft.
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/win9x/95func_3t0z.asp
Во-вторых, это не процедура, а функция. Автор написал процедура, так как сам неправильно ее импортирует. В том же MSDN смотрим, как надо и видим, что на самом деле – так:
function RegisterServiceProcess(dwProcessId, dwType: DWORD): DWORD; stdcall; external ‘kernel32.dll’ name ‘RegisterServiceProcess’;
Тогда никакие извороты с использованием ассемблера не понадобятся. А вызывать следует так:
RegisterServiceProcess(0,1);
В прочем, далее автор пишет, что следовало бы сделать не так, как у него, но все равно, считаю приведенный пример неправильного импорта вредным советом.
Ну и в-третьих, эта функция делает нашу программу не процессом (процесс и выполняющаяся программа – это одно и то же), а сервисом или как еще говорят – службой.

Стр. 24.
Автор перепутал термины, назвав WindowProc функцией обработки событий Windows. События (Events) и сообщения (Messages) – это принципиально разные вещи. Так же по всей книге автор путает принципиально разные понятия указателя и дескриптора.


Стр. 70.
Очень плохо описана функция установки ловушки. У читателя не сформируется понимание этого механизма. А заключается он в следующем: при установке ловушки, система регистрирует ее. Для этого она:
1. Получает имя исполняемого модуля, где находится функция ловушки (которая вызывается при каждом срабатывании) используя третий параметр функции SetWindowsHookEx.
2. Сохраняет адрес точки входа в функцию-обработчик ловушки (второй параметр)
3. Сохраняет идентификатор потока, в контексте которого ставится ловушка. (Четвертый параметр. Если он равен нулю – то все потоки).
Далее, когда любое приложение вызывает GetMessage, система проверяет, нет ли зарегистрированных ловушек. Если есть, то сверяет идентификатор вызывающего потока с тем, на который поставлена ловушка. Если все в порядке, то функция проверяет, загружен ли модуль с ловушкой в виртуальное адресное пространство. Если нет, то система вызывает LoadLibrary, загружая его. Далее вызывается функция ловушки. После отработки всех ловушек, GetMessage продолжает обычное выполнение.
В связи с этим, автор допускает известную ошибку с передачей в CallNextHookEx неправильного дескриптора ловушки. Именно из-за того, что не знал, что функция установки ловушки и сама функция ловушки выполняются в разных процессах.

Стр. 97.
"Я много раз использовал такую задержку (далее идет хитрый код с ожиданием события, которое никогда не будет установлено)….. Есть еще одна функция для осуществления задержки – Sleep, но она загружает систему, поэтому я ее не использую."


Вот этот откровенно бесполезный совет, к тому же, абсолютно не соответствует действительности. Для того чтобы это понять, необходимо знать, как работает планировщик потоков Windows. Вызов Sleep приводит к тому, что планировщик просто перестаёт выделять кванты времени потоку в течение заданного периода. В варианте с ожиданием события, планировщик перестаёт выделять кванты времени потоку до тех пор, пока не истечёт интервал или пока событие не будет установлено (хотя в данном коде оно не будет установлено никогда, планировщик об этом не знает и всё равно проверяет событие). Вариант, предложенный автором, загрузит процессор сильнее потому, что планировщик будет тратить дополнительное время на проверку события, да ещё и ресурсы при этом будут расходоваться на содержание лишнего объекта ядра и бесполезные переводы процессора в kernel-mode и обратно. Так что он хуже, чем Sleep, а не лучше.

Стр. 340.
"Теперь нам нужно установить уровень прозрачности. Это делается с помощью функции SetLayeredWindowAttributes. Первый параметр функции – указатель на окно. Второй мне не известен."


Мда. Постеснялся бы признаваться в том, что не умеет пользоваться MSDN и Platform SDK. Вот, щелкаем по ссылочке и читаем:
http://msdn2.microsoft.com/en-us/library/ms633540.aspx
Очевидно, что второй параметр – это значение типа COLORREF (а не Byte, как у автора идет далее), которое указывает на прозрачный цвет. Точки такого цвета не войдут в область окна. Дальше…

"Последний параметр – константа, и, как я понимаю, она обязана быть такой."

Подтверждение моих слов о том, что автор не умеет пользоваться справочной системой. Там все сказано – последний параметр – набор флагов. Указав LWA_COLORKEY ($00000001) мы говорим, что второй параметр нужно использовать (иначе он игнорируется). Указав LWA_ALPHA ($00000002) мы говорим, что третий параметр нужно использовать (иначе он игнорируется). Флаги можно объединять. В общем, читать нужно доки, а не факи.


 
Anatoly Podgoretsky ©   (2007-07-09 21:08) [7]

"Здесь объявлена недокументированная процедура RegisterServiceProcess, которая есть в ядре kernel32.dll. Эта процедура делает нашу программу процессом в системе Windows 9x."

Тут ошибка еще грубее, естественно не процессом, и тем более не сервисом. Эта функция позволяет всего лишь чуть чуть иммитировать сервисы (загрузить до логина), но сервисом не становится, поскольку сервисов в w9x просто нет.


 
Инс ©   (2007-07-09 21:12) [8]


> [7] Anatoly Podgoretsky ©   (09.07.07 21:08)


Возможно, действительно сервисы - это NT-шная фишка.


 
sniknik ©   (2007-07-09 21:12) [9]

> В общем, читать нужно доки
насколько помню автор сего не читатель, а писатель... в прямом смысле. он както хвастался, что не прочел ни одной книжки, доки, и т.д. даже в хелп не заглядывает, до всего "дошел" сам.
т.е. не тем ты его хочеш уязвить... он этим гордится.


 
Инс ©   (2007-07-09 21:16) [10]


> т.е. не тем ты его хочеш уязвить... он этим гордится.


Собственно, никого уязвить не хочу.  А Ваш пост действительно многое объясняет. Не стал бы советовать новичкам подобный путь. Наглядный пример к чему он ведет. Развелось целое поколение ламеров, считающих себя кулцхакерами.


 
Kolan ©   (2007-07-09 22:43) [11]

> а он состоит из сотен, а может и тысяч строчек кода

Типа хз. я не смотрел&#133 глупость.


 
Инс ©   (2007-07-09 23:46) [12]


> Возможно, действительно сервисы - это NT-шная фишка.


Хотя сейчас глянул - Microsoft употребляет термин service process, так что, будем называть это так. Вот такие вот неЭНТИшные сервисы... ;)


 
dimaxx ©   (2007-07-10 00:40) [13]


> hgd   (09.07.07 19:50)
>
> Подскажите, необходимо выполнить остановку процедуры на
> 10 сек. Процедура sleep(10000) "загружает" все процессы
> в компьютере и не дает им выполяться. Есть способ обойти
> это?

Юзай SleepEx.


 
Юрий Зотов ©   (2007-07-10 02:10) [14]

> dimaxx ©   (10.07.07 00:40) [13]

И что будет?


 
Германн ©   (2007-07-10 02:18) [15]


> Юрий Зотов ©   (10.07.07 02:10) [14]
>
> > dimaxx ©   (10.07.07 00:40) [13]
>
> И что будет?

Будет "щастье" :)
Но это так, между прочим. Всю ветку прочитать тяжело некоторым, а апломб есть.
"Фленовы" - существа очень способные к выживанию и размножению независимо от условий обитания :)


 
zapis   (2007-07-10 09:34) [16]

Фленов на самом деле как писатель хорош, его можно читать затаив дыхание, а настоящих программеров которые бы писали книжки которые бы можно было читать и не заснуть практически нету...


 
{RASkov} ©   (2007-07-10 09:47) [17]

> [16] zapis   (10.07.07 09:34)

Кэнту - отлично пишет, так же с "приколами" но профессионально, и обосновывает все свои действия, в отличии от "писателя" Фленова...


 
MetalFan ©   (2007-07-10 09:49) [18]

мда... жестокая книжка)
это наверное как "компьютер для блондинок", так и "делфи глазами хакера" ))))


 
Ega23 ©   (2007-07-10 09:55) [19]


> Фленов на самом деле как писатель хорош, его можно читать
> затаив дыхание, а настоящих программеров которые бы писали
> книжки которые бы можно было читать и не заснуть практически
> нету...


Мне в том возрасте больше Эммануэль Арсан нравилась...


 
Юрий Зотов ©   (2007-07-10 10:01) [20]

> zapis   (10.07.07 09:34) [16]

Если при чтении НАСТОЯЩИХ книжек по программированию человек засыпает, то это ОЧЕНЬ хорошо. Потому что четко указывает ему, что он занялся не своим делом и лишь зря тратит время.


 
Инс ©   (2007-07-10 10:22) [21]


> это наверное как "компьютер для блондинок"


Про Windows для блондинок только слышал. Вместо двух стандартных кнопок "Yes" и "No" - одна: "Maybe..."



Страницы: 1 вся ветка

Текущий архив: 2007.08.05;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.026 c
3-1177429285
Antaan
2007-04-24 19:41
2007.08.05
Кто знается на SQL подскажите


2-1183851195
RWolf
2007-07-08 03:33
2007.08.05
TListView, OwnerDraw, артефакты при ресайзе колонок


15-1183635469
@!!ex
2007-07-05 15:37
2007.08.05
Как до ставить Linux.


15-1183717597
Nic
2007-07-06 14:26
2007.08.05
Процедура или функция в DLL


3-1177393195
V-A-V
2007-04-24 09:39
2007.08.05
Проблема при добавлении полей в ClientDataSet