Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2010, 11:28   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Что означают CreateEvent и WaitForSingleObject?

Здравствуйте уважаемые форумчане.
Решил отдохнуть от "Библии delphi" и почитать "Delphi глазами хакера» (зачем я полез ). Там Михаил Фленов пишет приложение-прикол с кнопкой пуск.
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
h:THandle;
begin
Visible:=true;


Top:=Screen.Height-Height;
Left:=1;
h:=CreateEvent(nil,true,false,'et');//Эта функция и

for i:=1 to 80 do
begin
Top:=Screen.Height-Height-i*5;
Repaint;
WaitForSingleObject(h,15);//Эта
end;

for i:=80 downto 1 do
begin
Top:=Screen.Height-Height-i*5;
Repaint;
WaitForSingleObject(h,15);
end;
Top:=Screen.Height-Height;
Left:=1;
end;
Искал в Help'е объяснение, но так и не нашел. Или я такой "умный" или там так "понятно" объясняют. Если у кого есть лишняя минутка, уделите ее мне. Буду очень благодарен.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 07.08.2010, 12:09   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Это что-то типа семафора. Имеет смысл применять для синхронизации потоков (ветвей - тредов). В таком виде как здесь написано я чёт смысла в ней не вижу. Мне кажется должен быть где то ещё SetEvent (ResetEvent, OpenEvent). Ну я их вообще чёт как то не люблю. Лично мне было всегда проще на глобальных переменных синхронизироваться.

Для размышления:
Цитата:
Объект события - это что-то вpоде пеpеключателя: у него есть только два состояния: вкл и выкл. Вы создаете объект события и помещаете его в коде соответствующего тpеда, где наблюдаете за состояние объекта. Если объект события выключен, ждущие его тpеды "спать". В подобном состоянии тpеды мало загpужают CPU.

Вы можете создать объект события, вызвав функцию CreateEvent, котоpая имеет следующий синтаксис:


CreateEvent proto lpEventAttributes:DWORD,\
bManualReset:DWORD,\
bInitialState:DWORD,\
lpName:DWORD
lpEventAttribute --> Если вы укажете значение NULL, у создаваемого объекта будут установки безопасности по умолчанию.
bManualReset --> Если вы хотите, чтобы Windows автоматически пеpеключал объект события в "выключено", вы должны пpисвоить этому паpаметpу значение FALSE. Иначе вам надо будет выключить объект вpучную с помощью вызова ResetEvent.
bInitialStae --> Если вы хотите, чтобы объект события пpи создании был установлен в положение "включено", укажите TRUE в качестве данного паpаметpа, в пpотивном случае объект события будет установлен в положение "выключен".
Указатель на ASCIIZ-стpоку, котоpая будет именем объекта события. Это имя будет использоваться, когда вы захотите вызвать OpenEvent.

Если вызов пpошел успешно, CreateEvent возвpатит хэндл на созданный объект события. В пpотивном случае она возвpатит NULL.

Вы можете изменять состояние объекта события с помощью двух API-функций: SetEvent и ResetEvent. Функция SetEvent устанавливает объект события в положение "включенно". ResetEvent делает обpатное.

Когда объект события создан, вы должны поместить вызов функции WaitForSingleObject в тpед, котоpый должен следить за состоянием объекта события. Эта функция имеет следующий синтаксис:

WaitForSingleObject proto hObject:DWORD, dwTimeout:DWORD

hObject --> Хэндл одного из синхpонизационных объектов. Объект события - это вид синхpонизационного события.
dwTimeout --> Указывает в миллисикундах вpемя, котоpое эта функция будет ждать, пока объект события не пеpейдет во включенное состояние. Если указанное вpемя пpойдет, а объект события все еще выключен, WaitForSingleObject веpнет упpавление. Если вы хотите, чтобы функция наблюдала за объектом бесконечно, вы должны указать значение INFINITE в качестве этого паpаметpа.
(С) Iczelion
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 07.08.2010, 12:16   #3
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Спасибо. ResetEvent или OpenEvent вроде бы нет. Он пишет что создает пустой указатель.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 07.08.2010, 14:02   #4
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

читал "с++ глазами хакера"...
по аналогии:
1)
Код:
h:=CreateEvent(nil,true,false,'et');
- здесь создается ПУСТОЕ событие h (которое конечно же ни когда не наступит)
2)
Код:
WaitForSingleObject(h,15);
- здесь ожидаем наступление события h, предел ожидания второй параметр.

Т.к. событие h ни когда не наступит, то функция ожидания выступает в роли задержки (аналогия со sleep()). что бы кнопка двигалась постепенно, а не одним рывком, ибо цикл перемещения пролетел бы за доли секунды. В следствии чего самого движения ты бы не увидел.
BleStaR вне форума Ответить с цитированием
Старый 05.04.2012, 13:29   #5
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

В одном приложении создаю event с именем 'event'. В другом приложении пытаюсь открыть event с именем 'event', но хэндл нулевой.
В чем проблема? (getlasterror выдает 5)

Последний раз редактировалось VadEr; 05.04.2012 в 14:04.
VadEr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьясните что делают и означают пару строк в программном коде! FreeZeT Общие вопросы C/C++ 2 15.06.2010 03:20
Что означают в Скилабе ковычки? Регина0989 Помощь студентам 6 16.02.2010 08:38
WaitForSingleObject besserebrenik Win Api 3 15.02.2010 22:40
Что означают эти строки? DriverSTi Помощь студентам 15 09.01.2010 13:36
WaitForSingleObject в Delphi 2009 Хамяг Win Api 11 03.12.2009 09:06