Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WaitForSingleObject & Synchronize [D5]


Cashmare ©   (2006-02-01 12:28:00) 

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

Выдержка из 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 вписать и с чем его едят?


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

2 Digitman

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


Digitman   (2006-02-01 13:45:00) [2]

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


Digitman   (2006-02-01 13:44:00) [3]


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


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

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

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


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

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


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

2 Digitman.

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


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


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


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


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

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


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

Спасибо. Тогда непонятно, почему 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;

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


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


> Использую 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 12:50:00) [10]

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


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


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо