Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
ВнизПроцедура 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]> а он состоит из сотен, а может и тысяч строчек кода
Типа хз. я не смотрел… глупость.
← →
Инс © (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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.046 c