Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.045 c
2-1143460817
Igorntk
2006-03-27 16:00
2006.04.16
Максимальное значение поля


4-1138792357
bvn123
2006-02-01 14:12
2006.04.16
Как написать обработчик события, созданного с пом. CreateEvent


2-1144224832
Алексей1
2006-04-05 12:13
2006.04.16
Установка ориентации альбомной при печати.


6-1136500651
GanibalLector
2006-01-06 01:37
2006.04.16
WSA.Listen


2-1143471867
Setor
2006-03-27 19:04
2006.04.16
Как записать данные в начало файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский