ищется вариация WaitForSingleObject

Discussion in 'WASM.BEGINNERS' started by Xerx, Dec 30, 2008.

  1. Xerx

    Xerx Алексей

    Blog Posts:
    0
    Joined:
    Feb 17, 2005
    Messages:
    528
    Location:
    Russia
    Доброго времени суток. Прошу дельного совета по Win32API.
    Есть оконное приложение, в некоторые моменты из него вызовом CreateProcess открываются второстепенные оконные приложения. Они занимают занимают не всю область десктопа и могут перемещаться. Основное приложение должно ожидать закрытия этого дочернего приложения, но в тоже время отрисовываться при необходимости. Поэтому вариант с WaitForSingleObject не подходит. Подскажите идею по реализации подобного ожидания. Интересует точное определение момента завершения работы, а не опрос состояния с некоторым интервалом.

    Посмотрел в сторону SetWaitableTimer, но не уверен что это оно.

    Заранее большое спасибо!
     
  2. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Xerx
    Тоесть тебе нужно оторвать поток от ожидания ?
    Тогда используй APC. Первый поток при необходимости какойлибо обработки ставит в очередь потока ждущего в NtWaitForSingleObject апк с помощью NtQueueApcThread, в таком случае ждущий поток не возвратится из сервиса ожидания, но при необходимости обработки(когда первый поток сообщит) выполнит её. Хотя можно это не делоть, просто второй поток создай который будет ждать а первый рисовать.
     
  3. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    Clerk
    +1
     
  4. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    MsgWaitForMultipleObjects, но мне больше нравится ждать в отдельном треде.
     
  5. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Можно еще RegisterWaitForSingleObject. Ждущий тред будет выделен из тред пула.
     
  6. irrona

    irrona Member

    Blog Posts:
    0
    Joined:
    May 26, 2004
    Messages:
    178
    Location:
    Тирасполь
    Мне кажется при использовании ожидания с перерисовкой будут проблемы. Лучше использовать сообщения. Посмотри в сторону PostMessage -> PickMessage, SendMessage -> GetMessage.
     
  7. Xerx

    Xerx Алексей

    Blog Posts:
    0
    Joined:
    Feb 17, 2005
    Messages:
    528
    Location:
    Russia
    Мне просто нужно восстанавливать контекст основного окна. Никаких спец. программных отрисовок не происходит.
    Сейчас копну в сторону отдельного треда. По результатам отпишусь.

    Проблема решена. В основном потоке создаю тред, ему передаю hProcess. А он в себе вызывает WaitForSingleObject с INFINITE. А основной поток гоняет PeekMessage и обрабатывает только WM_PAINT через DispatchMessage. Работает.

    Всем спасибо :) Сам бы до этого конечно дошел, но сдавать прогу сегодня, а там еще куча работы и котелок не варит...

    С Наступающим всех!
    p.s. Католиков с прошедшим!