Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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]

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

Типа хз. я не смотрел&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.046 c
15-1183970292
dr Gonzo
2007-07-09 12:38
2007.08.05
Качество Freelance


15-1183856801
Petr V. Abramov
2007-07-08 05:06
2007.08.05
хорошо повесились


11-1166730914
MTsv DN
2006-12-21 22:55
2007.08.05
Ошибка в FileSize


15-1183913928
b52
2007-07-08 20:58
2007.08.05
закладка компоненты lblPath и Edtfile


2-1183996257
hgd
2007-07-09 19:50
2007.08.05
Процедура sleep





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский