Вопрос по анонимным пайпам

Предыдущая тема Следующая тема Перейти вниз

Вопрос по анонимным пайпам

Сообщение  trew в Пн Сен 30, 2013 9:12 pm

Читал тут туториал исзелиона по пайпам, но там все красиво будет работать если вызываемый процесс выполнил задачу и завершился. Там принцип построен именно на этом. Для этого в принципе не надо использовать кучу винапишного кода. В freebasic есть простое решение для этой задачи Open pipe.

У меня вопрос в другом. К примеру у меня запущена консольная программа. Чтобы не нагружать сильно, допустим обычное возведение в степень:

Код:
Dim As Integer iValue

Do
   
  Input "Input value:", iValue
 
  iValue ^=2
 
  Print  iValue
 
  Sleep(1)
 
Loop Until iValue = 100
Как видно после запуска данная программа будет работать, пока ей не введешь 10. В остальных случаях просто выводит результат вычислений.

А теперь сам вопрос, как оперировать этой программой из другой консольной программы?

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

В интернете везде написано, что дескриптор для записи после создания процесса надо закрывать. Но как тогда после этого передавать по каналу данные в программу?

Кто хорошо понимает, разъясните пожалуйста на пальцах.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Вопрос по анонимным пайпам

Сообщение  trew в Вт Окт 01, 2013 9:17 am

Все я уже разобрался.

1) Нужно создать две трубы
2) Одни концы(дескрипторы) для чтения и записи присвоить при старте дочернему процессу, а после запуска их освободить, как и писал исзелион. Хотя я пробовал не освобождать, все равно работает...
3) Вторыми пользоваться в родительском процессе

С панталыку сбивают разные исходники малопонимающих людей и еще более коварно то, что эти исходники не работают или работают не так как нужно. Находил исходники и на freebasic с созданием двух труб, но там похоже тоже писал не разобравшийся человек (похоже скопировал откуда-то, а в итоге куча ненужных вызываемых функций и работал он подобно исходнику исзелиона). Заглядывал и в MSDN , но там так замудрено блин... И все таки я нашел реально работающий исходник на Си от создателя WinBoard, посмотрев который, стало все предельно ясно.

Как только подкручу работу пайпов к шахматному движку, выложу на своем сайте пример.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Вопрос по анонимным пайпам

Сообщение  assembler_c в Пн Окт 07, 2013 2:23 pm

Вот синтаксис команды, создающей анонимный пайп:
Suspect 
BOOL WINAPI CreatePipe(
 _Out_     PHANDLE hReadPipe,
 _Out_     PHANDLE hWritePipe,
 _In_opt_  LPSECURITY_ATTRIBUTES lpPipeAttributes,
 _In_      DWORD nSize
);

Т. е. тут явно надо дать адрес на переменные для каналов чтения и записи. Потом при создании процесса их надо будет указатьWhat a Face :

typedef struct _STARTUPINFO {
 ...
 HANDLE hStdInput;
 HANDLE hStdOutput;
 HANDLE hStdError;

} STARTUPINFO, *LPSTARTUPINFO;

Мне видится один выход - сделать свой класс, перегрузив в него операторы записи и чтения Basketball (Let/Cast)
avatar
assembler_c

Сообщения : 12
Дата регистрации : 2013-07-02
Откуда : Кировоград, Украина

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Вопрос по анонимным пайпам

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения