2013-07-06 4 views
1

У меня есть программа на C, где через tcp socket я отправляю команду процессу peer. При получении этой команды процесс peer начнет выполнять запрошенную команду. Но это занимает много времени, и я не хочу, чтобы tcp-сокет долго ждал возвращаемого значения. Я думаю, что процесс вилки поможет мне сделать это. Но, я хочу, чтобы другие способы сделать это. Поделитесь своими мыслями и опытом, связанными с этим. Пожалуйста помоги. заблаговременно,вернуть значение из функции без выхода из функции в C

+0

Что вы хотите сделать, ожидая возвращения? – Joni

+0

после того, как команда будет успешно отправлена ​​и получит подтверждение от однорангового процесса, я хочу закрыть это соединение, но не хочу ждать, пока одноранговый процесс выполнит команду и вернет значение. – Sougrakpam

+1

Не удается закрыть соединение первым, а затем запустить длинную команду? – Kninnug

ответ

0

В UNIX существует множество форм стратегий межпроцессного взаимодействия (IPC). Один из моих любимых - порождать дочерний процесс и получать уведомление о его кончине. Праймер на IPC можно найти here, а пример асинхронного ожидания смерти дочерних процессов можно найти here. Если вы не хотите создавать отдельный процесс, вы можете использовать named pipes, чтобы поток информации переместился между двумя процессами.

+0

Я не хочу запускать процесс. Есть ли другой способ, с помощью которого мы можем достичь цели. – Sougrakpam

+0

именованные каналы также могут использоваться ... системы очереди сообщений V ... да, есть миллион способов скинуть этот кот. – ojblass

0

Вы можете использовать поток и ждать его до тех пор, пока не появится ответ. pthread и wait будут делать только штраф (потоки - это легкие процессы).

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

0

У меня нет ясности, что вы имеете в виду. Вы говорите, что хотите дать ответ, прежде чем знаете результат или может быть, возвращаемое значение не зависит от самого процесса. В терминах транзакционных сообщений есть два подхода: «синхронные» и «асинхронные» транзакции. Первый ждет, пока сервер завершит процесс и не даст результат, второй отправит запрос и получит токен, закроет сокет, а позже он запросит результат с этим токеном. Итак, что вы можете сделать, это предоставить запрашиваемому равному токен, где он может попросить ответ, как только процесс будет завершен. Обратите внимание, что вы можете дать ответ, который указывает, что «процесс все еще запущен, попробуйте позже». В вашем коде с кодом вы должны запрограммировать этот сценарий, дать каждому процессу число, сохранить результат с этим номером и, по запросу, с этим номером отправить результаты. Если это не подходит, более подробно объясните, что вы пытаетесь выполнить.

Смежные вопросы