задача: найти быстрый способ читать состояние dword'ов в памяти одного процесса из другого. исходные данные: - программа #1 - оптимизированные по скорости вычисления по некому алгоритму в цикле, представляет из себя win32 приложение , не использует оконный интерфейс..консоль вобщем "сама в себе"...введение в цикле чего нибудь API подобного , вызывает снижение скорости на 10% - программа #2 - любое нагромождение кода на любом языке для обработки данной от первой. (ее необходимость возникла из-за того что в основной программе нежелательно таскать с собой оконные интерфейсы и заниматься несвойственными ей вычислениями) сижу вот и думаю, как собирать из нее статистику счетчиков и состояний переменных не снижая скорости...что пробовал - -вывод в файл на диске не устраивает, такой тормоз мне не нужен, - почтовые слоты - просто но медленно + сервер нужно запускать заранее иначе придется - постоянно юзать в самом цикле связку CreateFile+WriteFile, да и программы должны быть желательно не сильно связанные друг с другом всякими проверками результат которых зависит от жизнеспособности другой. - влезть в ее процесс дело тоже недолгое, сразу исчезают вопросы с чтением, но появляются новые - с их обработкой .. никогда не писал полноценные оконные приложение в Dll ..или там нет проблем?) да и еще много о чем размышлял .. идеально бы было выделить общую память и юзать ее независимо друг от друга .. mov [mem], dword - в первой проге и что угодно уже во второй по чтению этой области, тк тут скорость неважна, но как я понимаю облом с этим? PS. просьба не пинать если я пропустил что-то очевидное и в каждом учебнике на первой странице описывается выделение видимой всем памяти в win32, ибо я нахожусь в творческом кризисе)
А нужны ли 2 процесса? IMHO достаточно 2х потоков. Подними приоритет тому, что считает. Цикл выборки сообщений практически всё время будет suspended, если делать GetMessage, а не PeekMessage. На межпроцессном взаимодействии больше потеряешь...
to S_T_A_S_, за вариант спасибо ..я основную трогать не хотел, она является законченным решением, и в этом варианте я ее пассивной хотел сделать, максимум на что хочется согласиться - до входа в цикл выполнить пару процедур, которые не изменят основной логики ...а если вторым тредом оконные нашлепки именно в ней реализовывать, то проект делится на две составляющих и каждое изменение нужно анализировать для обоих реализаций. хотя возможно это больше проблемы сознания, если не найду простой способ перегонять пару dword'ов то так и сделаю
Нашлепок организовать в DLL, экспортировать функцию примерно следующего содержания: Код (Text): .DATA? global_ptr dd ? id dd ? .CODE myfunc proc param1:DWORD ; param1 - указатель на ту пару dword'ов push param1 pop global_ptr invoke CreateThread,0,0,lpfnThread,0,0,OFFSET id ret myfunc endp А функция lpfnThread пусть занимается всеми околооконными делами. Ей, кстати, можно сразу понизить приоритет треда.
спасибо обоим, решение действительно в тредах, работает и с Dll и без нее без ущерба производительности. а то я тут уже собирался ее на хирургический стол положить - хуки ..патчинг ..и другие страшные вещи) ..горе от ума..