Очередь сообщений потока; shared сегменты

Тема в разделе "WASM.WIN32", создана пользователем Charliee, 21 ноя 2009.

  1. Charliee

    Charliee New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2009
    Сообщения:
    15
    Здравствуйте.
    Есть несколько вопросов:
    * как-то изучал ловушки, и столкнулся с разделяемыми между процессами сегментами. Насколько я понял, эти сегменты в exe-файле отмечаются каким-то особым флагом, и для всех приложений, которые применяют LoadLibrary к такому исполняемому файлу они вместо копирования в каждый вызвавший процесс (как ведут себя dll-данные), ведут себятак же, как и dll-код - размещается только одна копия, на которую ссылаются все процессы. В Visual studio есть директива #pragma data_seg(".Shared"). Этим "флагом" в испоняемом файле является только имя секции? Или это ввели просто для удобства в VC? Где можно почитать про Shared segments?
    Есть ли какой-нибудь аналог этого для Линукс?

    * и второй вопрос о потоках и очереди сообщений. В msdn сказано, что
    Где можно почитать про очередь сообщений (взгляд изнутри), кроме как в ядерном отладчике? Возможно ли создать поток без очереди сообщений, если та не нужна?
    Насколько эффективно она реализована в Windows? Может есть случаи, когда лучше использовать самоделки, наподобие тех же shared-сегментов (для разных процессов) или разделяемых переменных для потоков, выставляя синхронизирующие объекты, наподобие событий?

    Спасибо за ответы :)
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Правильнее делать #pragma section(".sect_name", shared, read, write)
    нет, флаг задается в таблице секций в PE-заголовке
    Это не будет работать.
    Нужно дополнительно задать атрибуты секции - #pragma comment(linker, "/section:.shared,RWS")
    http://msdn.microsoft.com/en-us/library/h90dkhs0(VS.80).aspx
    У Рихтера было немного.
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Поток изначально создается без очереди сообщений. Очередь создастся при первом вызове GetMessage или PeekMessage в потоке.
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Если быть точным, то очередь сообщений потока создается при вызове любой функции из USER или GDI