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

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

Восстановить пароль Регистрация
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
29.04.2012, 21:17     синхронизация в windows #1
есть два консольных приложения, родительского и дочернего процесса (должны ли они быть консольными), хочу обменяться между ними данными.Выбрал самый сложный путь. Использую пейпы
в комментариях я буду писать всё что непонятно
процесс - 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;
}
автор методички которую я использовал делал два пайпа , делал каждый односторонним( по его словам для ассинхроности), закрывал родительский поток(написано на паскале).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
29.04.2012, 22:46     синхронизация в windows #2
Van111, зачем тебе семафор, просто потому что другого примера синхронизации не нашёл???
Попробуй на вкус простую и вместе с тем эффективную синхронизацию через критическую секцию
Как после обработки потока запустить его с новым методом?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
30.04.2012, 15:17  [ТС]     синхронизация в windows #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Van111, зачем тебе семафор, просто потому что другого примера синхронизации не нашёл???
Попробуй на вкус простую и вместе с тем эффективную синхронизацию через критическую секцию
ясно, спасибо с критической секцией всё вроде бы проще,но не могли вы бы помочь разобраться с пейпами?

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

Добавлено через 24 минуты
всё разобрался ,хорошо что был word c++(куча статьей обо всем, взяты с acp c++ .net)
Yandex
Объявления
30.04.2012, 20:52     синхронизация в windows
Ответ Создать тему
Опции темы

Текущее время: 23:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru