IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Межпроцессное взаимодействие с помощью страничного файла, VC++ 2008 EE
18192123
сообщение 27.11.2008 19:43
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Здравствуйте!
Мне требуется реализовать обмен текстовыми сообщениями между несколькими процессами. Обеспечить возможность отправки сообщения сразу нескольким адресатам. Реализовать подтверждение приёма сообщения адресатом или, в случае потери сообщения, повторную его передачу. Взаимодействие выполнить с помощью страничного файла.

Возник ряд вопросов..
Пожалуйста, помогите разобраться!

Сначала хочу получить список активных процессов, вывести, скажем, на ListBox и выбрать процессы, которые будут приёмниками текстовых сообщений (а как можно в ListBox осуществить множестсвенный выбор? если вообще можно).
Далее можно из моего приложения открыть файл.
Теперь в процессе-передатчике создаём в памяти проекцию открытого дискового файла и отображаем её на адресное пространство процесса-отправителя с помощью CreateFileMapping(), где будем использовать дескриптор открытого файла...
Процессы же приёмники (выбранные в ListBox) по нажатию кнопки должны отобразить проекцию страничного файла на своё адресное пространство и прочитать данные, которые подлежат передаче...а как это осуществить? мне на понятно...И как это осуществить с учётом того, что получателей должно быть несколько??
И как я понимаю, процесс-приёмник не должен начинать читать из памяти данные раньше, чем их туда запишет отправитель...А как это должно выглядеть? (использовать объекты синхронизации?)
И последнее...В каком виде можно организовать подтверждение приёма сообщений, при чём чтоб было понятно, от какого процесса-приёмника пришло это подтверждение??

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
18192123
сообщение 28.11.2008 10:34
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


По ссылке из предыдущего поста имеется программа-пример MMFShare...На основе её решила выполнять своё задание...
Кое-что не понятно:
По нажатию кнопки у меня происходит следующее:

void OnClickButCreateMap(HWND hwnd)
{
s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 4 * 1024, TEXT("MMFSharedData"));

if (s_hFileMap != NULL) {

if (GetLastError() == ERROR_ALREADY_EXISTS) {
wsprintf(szBufErr,L"Mapping already exists - not created.");
SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr);
CloseHandle(s_hFileMap);

} else {
// File mapping created successfully.
// Map a view of the file into the address space.
pView = MapViewOfFile(s_hFileMap,
FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

if (pView != NULL) {
// Put edit text into the MMF.
//? Edit_GetText(GetDlgItem(hwnd, IDC_DATA),
// ? (PTSTR) pView, 4 * 1024);
// Protect the MMF storage by unmapping it.
UnmapViewOfFile(pView);

} else {
wsprintf(szBufErr,L"Can't map view of file.");
SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr);
}
}

} else {
wsprintf(szBufErr,L"Can't create file mapping.");
SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr);
}
}


Знаком "?" отмечено неясное...Что это за операция? Как её заменить с учётом того, что у меня на форме есть Edit, куда вводится сообщение для передачи..?

Сообщение отредактировано: 18192123 - 28.11.2008 10:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
18192123   Межпроцессное взаимодействие с помощью страничного файла   27.11.2008 19:43
volvo   Тебе сначала сюда: ближе к концу страницы есть тем...   27.11.2008 20:04
18192123   По ссылке из предыдущего поста имеется программа-п...   28.11.2008 10:34
volvo   Это макрос: MSDN -> Edit_GetText Macro Не надо...   28.11.2008 10:43
18192123   при компиляции возникла вот такая ошибка: 1>d:...   28.11.2008 11:26
volvo   Без понятия... Я открыл CPP-файл в Builder-е, он п...   28.11.2008 13:13
18192123   Попробуй не открывать тот проект, а создать новый...   28.11.2008 13:31
volvo   В таком случае, как ты компилируешь проект MMFShar...   28.11.2008 13:39
18192123   ... А если ты просто надергала куски из MMFShare ...   28.11.2008 13:47
volvo   Все прекрасно компилируется и GCC и Builder-ом 200...   28.11.2008 14:32
18192123   Добавила действия по нахождению объекта «проекция ...   28.11.2008 21:27
volvo   void OnCommand (HWND hwnd, int id, HWND hw, UINT){...   28.11.2008 23:31
18192123   void OnCommand (HWND hwnd, int id, HWND hw, UINT)...   29.11.2008 0:13
18192123   Теперь насчёт повторной отправки сообщения..в случ...   30.11.2008 2:10
volvo   А что, если в первый раз отсылка была неудачной, т...   30.11.2008 11:42


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 7:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"