OpenEvent

Discussion in 'WASM.WIN32' started by zloi_goh, Aug 1, 2008.

  1. zloi_goh

    zloi_goh New Member

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

    2FED New Member

    Blog Posts:
    0
    Joined:
    Feb 20, 2008
    Messages:
    1,002
    У меня всё работает
     
  3. Vilco

    Vilco Vitaly

    Blog Posts:
    0
    Joined:
    Mar 5, 2007
    Messages:
    190
    Location:
    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

    Blog Posts:
    0
    Joined:
    Jul 26, 2008
    Messages:
    500
    zloi_goh
    Обсуждалось недавно, GetLastError юзается если тока функция возвращает ошибку, в успешном случае код ошибки не меняется.
     
  5. zloi_goh

    zloi_goh New Member

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

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

    Nero_n New Member

    Blog Posts:
    0
    Joined:
    Apr 25, 2008
    Messages:
    33
    zloi_goh
    чем использовать Sleep() (не исправляя ошибку, а лишь значительно уменьшая вероятность ее возникновения), рекомендую вызывать CreateEvent до создания процесса B. либо вместо OpenEvent во втором процессе вызывай опять CreateEvent.