Форум программистов, компьютерный форум CyberForum.ru

Обмен данными между процессами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Можно ли подключить в программу свои exe-файлы в языке си? http://www.cyberforum.ru/cpp/thread189253.html
здрастуйте, господа программисты!!! не могли бы вы мне помочь: всегда было интересно: можно ли подкльчить в программу свои exe-файлы в языке си (например: #include"f1.exe" или #include<f1.exe>) заранее спасибо.
C++ С++ || C Здравствуйте. Мой один друг создает игры на GameMaker и он решил перейти на более высоки язык. Я ему предложил С++, а он хочет просто С. Подскажите что лучше для разработки игр. http://www.cyberforum.ru/cpp/thread189062.html
Нужен совет! C++
Доброго времени суток! Возможно таких тем как эта было уже миллион.. но всё же, хотелось бы услышать ваше мнение. Поставил перед собой задачу научиться программировать. Цели на первое время - какие-нибудь маленькие программки на подобии таймера и т.п. Позже хотелось бы написать пару программ которые могли бы выполнять за меня действия.. ну что-то на подобии ботов.. боты эти будут работать с...
C++ C++ форматирование (создание файловой системы) Fat16
Возникла необходимость в написании утилиты в С++, позволяющей создавать файловую систему Fat16. Теоретически все понятно, но вот реализация в данной среде - уже тяжело. Очень нужна помощь!!!! С API не сталкивалась, в среде С++ работаю недавно((((( Заранее огромное спасибо!!!!!
C++ Работа со stream потоками+указатели http://www.cyberforum.ru/cpp/thread188786.html
Всем привет. Есть функция осуществляющая вывод инфы с помощью потоков (cin, cout ...). Эту же инфу нужно выводить и в файл, поэтому хочу модернизировать функцию так чтобы передавать ей указатель на консольный поток либо файловый, однако эти объекты принадлежат разным классам и возникает проблема с типами указателей. Предпоследний мой вариант реализации был такой: void...
C++ Функция оператора "+" класса valarray, нужен пример valarray<T> operator+() const; Друзья, дайте пример использования такого кода. Насколько я понимаю, в скобках должен быть аргумент. А его нет. Вопрос: что же тогда плюсуется-то? Спасибо (НА всякий случай: взято отсюда: http://www.cplusplus.com/reference/std/valarray/valarray/operators/) подробнее

Показать сообщение отдельно
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
29.11.2010, 04:07  [ТС]     Обмен данными между процессами
Решил использовать для обмена данными FileMapping. Где то прочитал что он быстро работает. (так ли это?) Сама работа понятна с файлмэппингом. Но у меня нескольким дочерним процессам нужно будет читать/писать информацию в проецируемый в память файл. Необходимо было прикрутить какой-нибудь механизм синхронизации. Я решил сделать через семафоры.

Сам семафор в вызывающем процессе создается замечательно. НО вот незадача - пытаюсь открыть семафор в дочернем процессе при помощи функции
C++
1
2
3
4
5
HANDLE OpenSemaphore(
  DWORD dwDesiredAccess,
  BOOL bInheritHandle,
  LPCTSTR lpName
);
и не получается. OpenSemaphore возвращает NULL.

Вызывающий процесс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class WINDOW : public CFrameWnd   
{
private:
    HANDLE hSemaphore;
           ...
public:
    WINDOW (int);
            afx_msg void Обработчик_кнопки ();
            DECLARE_MESSAGE_MAP();
    ~WINDOW();
};
 
BEGIN_MESSAGE_MAP(WINDOW, CFrameWnd)   
    ON_COMMAND(ид_кнопки,обработчик_кнопки)
END_MESSAGE_MAP()
 
WINDOW::WINDOW (int r)  
{
...
hSemaphore=CreateSemaphore(NULL,1,1,"WCS");
...
}
 
afx_msg void WINDOW::Обработчик_кнопки ()
{
...
STARTUPINFO cif;
ZeroMemory(&cif,sizeof(STARTUPINFO));
PROCESS_INFORMATION pi;
CreateProcess(".\\exe\\warcraft_unit.exe",NULL,NULL,NULL,false,NULL,NULL,NULL,&cif,&pi);
...
}
Вызываемый процесс(диалог в качестве главного окна):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class  MY_DIALOG: public CDialog
{
private:
    HANDLE hSem;
           ...;
public:
    MY_DIALOG ( char  * DialogName, CWnd  *Owner );
    DECLARE_MESSAGE_MAP();
           ~MY_DIALOG();
};
 
MY_DIALOG::MY_DIALOG ( char  * DialogName, CWnd  *Owner ): CDialog ( DialogName, Owner) 
{
    hSem=OpenSemaphore(NULL,false,"WCS");
    if(hSem == NULL) {
        MessageBox("Unable to open semaphore", "Error!", MB_ICONSTOP);
        exit(1);
        }
           ...
}
Что следует сделать, чтобы открыть семафор в дочернем процессе?

Добавлено через 3 часа 55 минут
ЭЭэ все разобрался в своих ошибках... на данный момент помощь не требуется.
 
Текущее время: 23:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru