нужна общая память

Тема в разделе "WASM.WIN32", создана пользователем MHz, 26 фев 2005.

  1. MHz

    MHz New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2004
    Сообщения:
    13
    задача:

    найти быстрый способ читать состояние dword'ов в памяти одного процесса из другого.



    исходные данные:

    - программа #1 - оптимизированные по скорости вычисления по некому алгоритму в цикле,

    представляет из себя win32 приложение , не использует оконный интерфейс..консоль

    вобщем "сама в себе"...введение в цикле чего нибудь API подобного , вызывает

    снижение скорости на 10%



    - программа #2 - любое нагромождение кода на любом языке для обработки данной от первой.

    (ее необходимость возникла из-за того что в основной программе нежелательно таскать с собой оконные

    интерфейсы и заниматься несвойственными ей вычислениями)



    сижу вот и думаю, как собирать из нее статистику счетчиков и состояний переменных

    не снижая скорости...что пробовал -

    -вывод в файл на диске не устраивает, такой тормоз мне не нужен,

    - почтовые слоты - просто но медленно + сервер нужно запускать заранее иначе придется

    - постоянно юзать в самом цикле связку CreateFile+WriteFile, да и программы должны быть желательно

    не сильно связанные друг с другом всякими проверками результат которых зависит от жизнеспособности

    другой.

    - влезть в ее процесс дело тоже недолгое, сразу исчезают вопросы с чтением, но появляются новые -

    с их обработкой .. никогда не писал полноценные оконные приложение в Dll ..или там нет проблем?)

    да и еще много о чем размышлял ..



    идеально бы было выделить общую память и юзать ее независимо друг от друга ..

    mov [mem], dword - в первой проге и что угодно уже во второй по чтению этой области,

    тк тут скорость неважна, но как я понимаю облом с этим?



    PS. просьба не пинать если я пропустил что-то очевидное и в каждом учебнике на первой странице

    описывается выделение видимой всем памяти в win32, ибо я нахожусь в творческом кризисе)
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    А нужны ли 2 процесса? IMHO достаточно 2х потоков. Подними приоритет тому, что считает. Цикл выборки сообщений практически всё время будет suspended, если делать GetMessage, а не PeekMessage. На межпроцессном взаимодействии больше потеряешь...
     
  3. MHz

    MHz New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2004
    Сообщения:
    13
    to S_T_A_S_,

    за вариант спасибо ..я основную трогать не хотел,

    она является законченным решением, и в этом варианте

    я ее пассивной хотел сделать, максимум на что хочется

    согласиться - до входа в цикл выполнить пару процедур,

    которые не изменят основной логики ...а если вторым тредом

    оконные нашлепки именно в ней реализовывать, то проект делится

    на две составляющих и каждое изменение нужно анализировать для обоих

    реализаций. хотя возможно это больше проблемы сознания,

    если не найду простой способ перегонять пару dword'ов

    то так и сделаю
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Нашлепок организовать в DLL, экспортировать функцию примерно следующего содержания:
    Код (Text):
    1. .DATA?
    2. global_ptr dd ?
    3. id         dd ?
    4.  
    5. .CODE
    6. myfunc proc param1:DWORD
    7.    ; param1 - указатель на ту пару dword'ов
    8.    push param1
    9.    pop global_ptr
    10.    invoke CreateThread,0,0,lpfnThread,0,0,OFFSET id
    11.    ret
    12. myfunc endp


    А функция lpfnThread пусть занимается всеми околооконными делами. Ей, кстати, можно сразу понизить приоритет треда.
     
  5. MHz

    MHz New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2004
    Сообщения:
    13
    звучит хорошо, пойду пробовать
     
  6. MHz

    MHz New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2004
    Сообщения:
    13
    спасибо обоим,

    решение действительно в тредах, работает и с Dll и без нее

    без ущерба производительности.

    а то я тут уже собирался ее на хирургический стол положить -

    хуки ..патчинг ..и другие страшные вещи) ..горе от ума..