Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

разделяемые сегменты

3.2K
31 мая 2006 года
MasterKlass
47 / / 06.03.2005
Есть задание.
2 процессы "общаются" через общий (разделяемй) сегмент (shared segment)

в каком русле копать? =)
1.8K
31 мая 2006 года
k3Eahn
365 / / 19.12.2005
Цитата:
Originally posted by MasterKlass
Есть задание.
2 процессы "общаются" через общий (разделяемй) сегмент (shared segment)

в каком русле копать? =)


Для процессов, запускаемых с идентичного экзешника можно сделать так(а также для dll):

 
Код:
#pragma data_seg(".shared")
#pragma comment(linker,"/SECTION:.shared,RWS")
__declspec(allocate(".shared")) long a;

Здесь а будет находиться в разделяемой секции PE-файла.
Для процессов от различный экзешников можно задействовать
File mapping
3.2K
01 июня 2006 года
MasterKlass
47 / / 06.03.2005
Цитата:
Originally posted by k3Eahn
Для процессов, запускаемых с идентичного экзешника можно сделать так(а также для dll):
 
Код:
#pragma data_seg(".shared")
#pragma comment(linker,"/SECTION:.shared,RWS")
__declspec(allocate(".shared")) long a;

Здесь а будет находиться в разделяемой секции PE-файла.
Для процессов от различный экзешников можно задействовать
File mapping



отлично. File Mapping не подходит, а #pragma самое то вроде...
Но я наверное просто не понимаю..
CreateProcess() создает отдельный процесс. Но ЧТО этот процесс будет выполнять?
Мне надо, чтобы один процесс что-то записал в этц перменную а, а другой считал..

1.8K
01 июня 2006 года
k3Eahn
365 / / 19.12.2005
Синхронизация доступа к переменной.
3.2K
02 июня 2006 года
MasterKlass
47 / / 06.03.2005
хорошо...
только как мне запустить процесс.. с какими параметрами?
и как же процесс получит доступ к разделяемой переменной?
не могу понять как это в коде будет выглядеть...
3.2K
03 июня 2006 года
MasterKlass
47 / / 06.03.2005
[SIZE=2] как-то я смутно спросил)

главные вопросы..
Какой процесс мне нужно создать?..
Как он получит доступ к разделяемой перменной?
[/SIZE][SIZE=2]:confused:[/SIZE]
1.8K
03 июня 2006 года
k3Eahn
365 / / 19.12.2005
Код:
#include <conio.h>
#include <stdio.h>
#include <windows.h>

HANDLE hMutex;
#pragma bss_seg(".shared")
#pragma comment(linker,"/SECTION:.shared,RWS")
char sharedbuf[1];


void main(void)
{
   
    hMutex=CreateMutex(NULL,TRUE,"MUTANT4SHAREDSECTION");
    if(GetLastError()!=ERROR_ALREADY_EXISTS)
    {
   
        printf("Enter something(up to 4095 symbols"\
            "or failure may occur) then launch the same exe:\n");
        gets(sharedbuf);
       
       
    }
    else
        printf("You've entered:\n%s",sharedbuf);
   
    getch();
    CloseHandle(hMutex);

}

P.S.:Думаю, суть выше приведённого кода понятна.
3.2K
04 июня 2006 года
MasterKlass
47 / / 06.03.2005
спасибо, k3Eahn, Вы мне очень помогаете.
Только вот вопрос про второй процесс.. Это мне нужно отдельно создавать ехе-шник чтоли? или какой процесс создавать???
1.8K
04 июня 2006 года
k3Eahn
365 / / 19.12.2005
MasteKlass,
а Вы не пробовали посмотреть как работает приведённый выше код?
(Подсказка: там нужно запустить собранный exe, ввести строчку, нажать Enter и не завершая этого процесса запустить с этого же exe новый процесс.)
[QUOTE=MasterKlass]Только вот вопрос про второй процесс.. Это мне нужно отдельно создавать ехе-шник чтоли? или какой процесс создавать???[/QUOTE]
Я не телепат...
3.2K
04 июня 2006 года
MasterKlass
47 / / 06.03.2005
ок.
я в курсе как работает код выше.
спасибо за помощь, но можно было и помягче.
1.8K
04 июня 2006 года
k3Eahn
365 / / 19.12.2005
Дык я ничего жёсткого и не писал.
Задавайте конкретный вопрос, если хотите быстро получить ответ, который Вас устроит.

With best regards, k3Eahn.
3.2K
05 июня 2006 года
MasterKlass
47 / / 06.03.2005
можно 2 вопроса про код)
1. почему до 4095 символов можно ввести?
2. работа с мьютексами немного непонятна... Мы в каждом процессе создаём мьютекс?
1.8K
05 июня 2006 года
k3Eahn
365 / / 19.12.2005
[QUOTE=MasterKlass]
1. почему до 4095 символов можно ввести?
[/QUOTE]
Разделяемая секция будет отображена на одну страницу в 4 кБ в линейном адресном пространстве процесса, поэтому можно ввести 4095 сиволов+1 завершающий ноль.
А за этой секцией могут, например находиться другие страницы других
секций которые не имеют аттрибута записи, или вообще не выделены, или что-нибудь ещё.
[QUOTE=MasterKlass]
2. работа с мьютексами немного непонятна... Мы в каждом процессе создаём мьютекс?[/QUOTE]
Мьютекс создаётся с таким именем тогда, когда нет объекта-мьютекса с таким же именем.
Если же мьютекс с таким именем существует, то CreateMutex просто вернёт его хэндл, а GetLastError вернёт ERROR_ALREADY_EXISTS.
3.2K
05 июня 2006 года
MasterKlass
47 / / 06.03.2005
так и подумал про страничку)

Спасибо большое.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог