Главная страница
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
2-1143658583
Leshas
2006-03-29 22:56
2006.04.16
TabControl - поместить элементы на разные вкладки


15-1143136894
X9
2006-03-23 21:01
2006.04.16
Проблемы с разделами


15-1143542456
McSimm
2006-03-28 14:40
2006.04.16
Подскажите какие-нибудь команды для Делфи с описанием


15-1143020600
Кручен-Верчен
2006-03-22 12:43
2006.04.16
Не получается решить интегралы.


2-1144000332
Malik
2006-04-02 21:52
2006.04.16
Работа с "левыми" приложениями