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

Вниз

WaitForSingleObject & Synchronize   Найти похожие ветки 

 
Cashmare   (2006-02-01 12:28) [0]

Здравствуйте, уважаемые мастера. Помогите разобраться глупому в следующем:

Выдержка из help"а:

DWORD WaitForSingleObject(

   HANDLE hHandle, // handle of object to wait for
   DWORD dwMilliseconds  // time-out interval in milliseconds  
  );

Windows NT: The handle must have SYNCHRONIZE access. For more information, see Access Masks and Access Rights.

Читал, ну ничего не понял! Куда этот SYNCHRONIZE вписать и с чем его едят?


 
Игорь Шевченко ©   (2006-02-01 12:30) [1]


> Куда этот SYNCHRONIZE вписать и с чем его едят?


Когда получаешь Handle методом OpenXXXX или CreateXXXX в качестве параметров доступа должен быть указан SYNCRONIZE


 
Cashmare   (2006-02-01 12:50) [2]

Использую CreateEvent. И куда там вписать SYNCHRONIZE, все равно не понимаю :(((


 
Игорь Шевченко ©   (2006-02-01 12:55) [3]


> Использую CreateEvent


The handle returned by CreateEvent has EVENT_ALL_ACCESS access to the new event object and can be used in any function that requires a handle to an event object.

в EVENT_ALL_ACCESS SYNCHRONIZE входит по умолчанию.


 
Cashmare   (2006-02-01 13:06) [4]

Спасибо. Тогда непонятно, почему WaitForSingleObject не срабатывает. Описал структуры:

type

 RX_TX_Buffer=packed record
   FrameFormat:word;
   StandartID:word;
   ExtendedID:dword;
   RTR:word;
   DLC:word;
   DataBytes:array [0..7] of word;
 end;

 TEventData=record
   RxTxBuffer:RX_TX_Buffer;
   IntrID:byte;
 end;

var   sa4Event:SECURITY_ATTRIBUTES;
      evd:TEventData;

далее:

 sa4Event.nLength:=sizeof(sa4Event);
 sa4Event.lpSecurityDescriptor:=nil;
 sa4Event.bInheritHandle:=True;
 hEvent:=CreateEvent(@sa4Event,True,False,nil);

Получил хэндл, далее:

 DefEvent(hEvent,True);

В параллельном потоке делаю:

   res3:=WaitForSingleObject(hEvent,10);
   if res3=WAIT_OBJECT_0 then begin
     ResetEvent(hEvent);
     GetEventData(@evd);
   end;

Не срабатывает! Хотя физически событие происходит.


 
Cashmare   (2006-02-01 13:13) [5]

Да, функции DefEvent и GetEventData - из сторонней библиотеки, заведомо рабочие, дело не в них.


 
Digitman ©   (2006-02-01 13:18) [6]


> Не срабатывает


Откуда знаешь ?
М.б. ты просто не дождался его ? Тайм-аут ожидания у тебя всего 10 мс указан ..


 
Cashmare   (2006-02-01 13:21) [7]

2 Digitman.

Ставил таймаут INFINITE - все равно не работает!


 
Cashmare   (2006-02-01 13:41) [8]

Извиняюсь, вопрос снят. Кривые руки :)))
Всем спасибо!


 
Digitman ©   (2006-02-01 13:44) [9]


> все равно не работает


Да что значит "не работает" ?!

Если будучи вызванной с INFINITE-таймаутом ф-ция блокирует вызвавший ее поток на неопределенное время, то это означает лишь одно - событие у тебя никогда не сигналит !

В противном случае ф-ция вернет управление с результатом
- WAIT_OBJECT_0 (событие просигналило),
- WAIT_TIMEOUT (при таймауте отличном от INFINITE),
- WAIT_ABANDONED (если в ходе ожидания объект-ивент перестал существовать),
- WAIT_FAILED (объект ожидания не существует или по причине, указанной в GetLastError)


 
Digitman ©   (2006-02-01 13:45) [10]

WAIT_ABANDONED , кстати, ты не получишь, поскольку в кач-ве объекта синхр-ции используешь ивент, а не мьютекс


 
Cashmare   (2006-02-01 14:00) [11]

2 Digitman

Уже все нормально, все работает. Была задача оживить покупной переходник PCI-CAN. Просто я его недоинициализировал, так сказать, вот ничего и не работало. :)))



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

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

Наверх




Память: 0.49 MB
Время: 0.044 c
3-1140548087
Варяг
2006-02-21 21:54
2006.04.16
Упаковка ADOTable


9-1128328498
XCoder
2005-10-03 12:34
2006.04.16
Камера


2-1143956177
Владимир_К
2006-04-02 09:36
2006.04.16
Динамическое создание компонентов.


3-1140417228
Os
2006-02-20 09:33
2006.04.16
Удаление дублирующих записей


11-1124457159
Seeker
2005-08-19 17:12
2006.04.16
проблема с Listbox