Форум: "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.039 c