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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
#1

синхронизация в windows - C++

29.04.2012, 21:17. Просмотров 541. Ответов 4
Метки нет (Все метки)

есть два консольных приложения, родительского и дочернего процесса (должны ли они быть консольными), хочу обменяться между ними данными.Выбрал самый сложный путь. Использую пейпы
в комментариях я буду писать всё что непонятно
процесс - parent.exe
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
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <cstdlib>
#include <iostream>
#include "windows.h"
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    bool Status_Error=0;
    int size_read;
    char buffer[255]="Hello";
    SECURITY_ATTRIBUTES S_A;
    SECURITY_DESCRIPTOR S_D;
    STARTUPINFO S_I;
    PROCESS_INFORMATION P_I;
    HANDLE HRead,HWrite,Semaf;
    OVERLAPPED O_L;
    
    CreateSemaphore(0,0,1,"Semaf1");
    Semaf=OpenSemaphore(SEMAPHORE_ALL_ACCESS,true,"Semaf1");
    //правильно ли вообще устанавливаю атрибуты?
    S_A.nLength=sizeof(SECURITY_ATTRIBUTES);
    S_A.lpSecurityDescriptor=&S_D;
    S_A.bInheritHandle=TRUE;
    CreatePipe(&HRead,&HWrite,&S_A,256);
    memset(&S_A,0,sizeof(SECURITY_ATTRIBUTES));
    
    S_I.dwFlags=STARTF_USESTDHANDLES;
    S_I.hStdInput=HRead;
    S_I.hStdOutput=HWrite;
    S_I.hStdError=GetStdHandle(STD_ERROR_HANDLE);
  
    CreateProcess("c:\\dev-cpp\\kid.exe",0,0,0,CREATE_NEW_CONSOLE,0,0,0,&S_I,&P_I);//что поставить вместо CREATE_NEW_CONSOLE
    
    
    
    memset(&O_L,0,sizeof(OVERLAPPED));
    O_L.hEvent=Semaf;//типа после чтения данных родительский поток должен продолжится
    WriteFile(HWrite,buffer,strlen(buffer),(DWORD*)&size_read,0);
    ReadFile(HRead,buffer,strlen(buffer),(DWORD*)&size_read,&O_L);//асинхронность
    WaitForSingleObject(Semaf,INFINITE);//ждём пока наше асинхронное чтение закончится 
    system("PAUSE");
    return EXIT_SUCCESS;
}
процесс - kid.exe
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdlib>
#include <iostream>
#include "windows.h"
using namespace std;
 
int main(int argc, char *argv[])
{
    char buff[20];
    cin >>buff;// что использовать вместо cin и cout, нужно ли тут ожидание?
    cout <<"HELLO";
    system("PAUSE");
    return EXIT_SUCCESS;
}
автор методички которую я использовал делал два пайпа , делал каждый односторонним( по его словам для ассинхроности), закрывал родительский поток(написано на паскале).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2012, 21:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос синхронизация в windows (C++):

Синхронизация - C++
Помогите, пожалуйста, в общих чертах рассказать про синхронизацию процессов на основе механизма обмена сообщениями. как это примерно должно...

Синхронизация потоков - C++
Есть статический класс к которому я хочу обращаться из разных потоков static class MyLog { public: static int log(std::string,...

Синхронизация мьютекс - C++
Привет, на данный момент пытаюсь научиться пользоваться синхронизацией. Есть такой код: #include &lt;iostream&gt; #include &lt;chrono&gt; ...

Синхронизация потоков в c++ - C++
Совершенно не понятно что не так и как правильно. Задача: Отсортировать массив целых чисел. Программу разбить на два синхронизированных...

Синхронизация процессов - C++
std::mutex позволяет синхронизировать несколько разных потоков. А есть ли в std что ни будь для синхронизации процессов? То есть, программа...

синхронизация потоков - C++
проблема в следующем: есть 2 потока один считает некоторую сумму в цикле по столбцам матрицы второй должен выводить промежуточную...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
29.04.2012, 22:46 #2
Van111, зачем тебе семафор, просто потому что другого примера синхронизации не нашёл???
Попробуй на вкус простую и вместе с тем эффективную синхронизацию через критическую секцию
Как после обработки потока запустить его с новым методом?
1
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
30.04.2012, 15:17  [ТС] #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Van111, зачем тебе семафор, просто потому что другого примера синхронизации не нашёл???
Попробуй на вкус простую и вместе с тем эффективную синхронизацию через критическую секцию
ясно, спасибо с критической секцией всё вроде бы проще,но не могли вы бы помочь разобраться с пейпами?

Добавлено через 13 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
синхронизацию через критическую секцию
у меня два процесса поэтому нужны семафоры
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.04.2012, 19:57 #4
Van111, попробуй заглянуть сюда
http://www.codenet.ru/progr/cpp/proc...reads-sync.php
1
Van111
кодер с++
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
30.04.2012, 20:52  [ТС] #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
http://www.codenet.ru/progr/cpp/proc...reads-sync.php
к сожалению ничего нового
-=ЮрА=-, я так понял не именованый пайп нужен только для передачи данных между родительским и дочерним приложениями, а если передавать пейп через другие средства общения процессов то вообще зачем он нужен. Получается что лучше тогда использовать именованный пейп?

Добавлено через 24 минуты
всё разобрался ,хорошо что был word c++(куча статьей обо всем, взяты с acp c++ .net)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 20:52
Привет! Вот еще темы с ответами:

Синхронизация доступа - C++
Собственно есть массив структур. У данной структуры есть переменная, которая хранит состояние данной структуры(готова,не готова). В...

Многопоточная сортировка: синхронизация - C++
Добрый день, только начал изучать параллельное программирование и решил написать параллельную битоническую сортировку. Суть её в том, что...

Синхронизация потоков Event c++ - C++
Необходимо, чтобы нить t4 ждала события просчета времени &quot;time = 1000 * (getTime() - time);&quot; и после этого запускалась. Как реализовать?...

Синхронизация потоков на семафорах - C++
почему не работает синхронизация потоков на семафорах? при компиляции ошибка сегментирования. На мютексах работает корректно. Потоки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.04.2012, 20:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru