OpenEvent

Тема в разделе "WASM.WIN32", создана пользователем zloi_goh, 1 авг 2008.

  1. zloi_goh

    zloi_goh New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2008
    Сообщения:
    2
    Здравствуйте всем. Опишу проблему:
    Существует два процесса(назову их процессА и процессВ). ПроцессВ является дочерним процессом процессаA. ПроцессА создает евент так:
    Код (Text):
    1. HANDLE hEvent=CreateEventA(0,FALSE,FALSE,"EventName");
    Затем встает в позу ожидания:
    Код (Text):
    1. WaitForSingleObject(hEvent,INFINITE);
    Тем временем процессВ получает хэндл события:
    Код (Text):
    1. HANDLE hEvent=OpenEvent(EVENT_MODIFY_STATE,FALSE,"EventName");
    Затем выполняет кое-какую работу и дает отмашку, мол я закончил:
    Код (Text):
    1. SetEvent(hEvent);
    Проблема в том, что OpenEvent завершается неудачно, GetLastError возвращает ERROR_NOACCESS(типа нет доступа). Если у кого нибудь есть мысли, поможите пожалуйста.
    P.S. Ось WinXP SP3. Оба процесса запущенны под администратором.
     
  2. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    У меня всё работает
     
  3. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    lpEventAttributes
    [in] Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpEventAttributes is NULL, the handle cannot be inherited.
    Если не работает попробуйте заполнить структуру для 1 параметра CreateEvent
     
  4. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    zloi_goh
    Обсуждалось недавно, GetLastError юзается если тока функция возвращает ошибку, в успешном случае код ошибки не меняется.
     
  5. zloi_goh

    zloi_goh New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2008
    Сообщения:
    2
    CrystalIC
    Спасибо, указал нужное направление. ERROR_NOACCESS результат жизнидеятельности вызываемой раннее функции. Трабл решился так: Sleep(1000);
    Просто процессВ вызывл OpenEvent раньше чем эвэнт был создан процессомА.

    Тему можно закрывать. Всем спасибо за проявленное участие.
     
  6. Nero_n

    Nero_n New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2008
    Сообщения:
    33
    zloi_goh
    чем использовать Sleep() (не исправляя ошибку, а лишь значительно уменьшая вероятность ее возникновения), рекомендую вызывать CreateEvent до создания процесса B. либо вместо OpenEvent во втором процессе вызывай опять CreateEvent.