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

Тема в разделе "WASM.BEGINNERS", создана пользователем Xerx, 30 дек 2008.

  1. Xerx

    Xerx Алексей

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

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

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

    Clerk Забанен

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

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Clerk
    +1
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    MsgWaitForMultipleObjects, но мне больше нравится ждать в отдельном треде.
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Можно еще RegisterWaitForSingleObject. Ждущий тред будет выделен из тред пула.
     
  6. irrona

    irrona Member

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

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Мне просто нужно восстанавливать контекст основного окна. Никаких спец. программных отрисовок не происходит.
    Сейчас копну в сторону отдельного треда. По результатам отпишусь.

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

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

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