У меня есть несколько методов в C "DoSomething1()
", "DoSomething2()
", ..., "DoSomethingN()
", который запрашивает некоторые данные. Эти методы можно вызывать одновременно. Данные находятся в другом процессе и в настоящее время представляют собой связь между текущим процессом и другим процессом выполняется с использованием сокета.Синхронные обратные вызовы в C
Как создать синхронный обратный вызов «GetSpecialValue()
», который запрашивает данные с использованием вышеупомянутого сокета, а затем, когда сокет отвечает, возвращает ответ обратно на конкретный «DoSomethingN()
», который запросил его?
Имейте в виду, что у меня есть много методов, которые работают с одним сокетом и передают запросы, чтобы их ответ возвращался к определенному методу, инициировавшему вызов. Эти методы работают в разных потоках.
int DoSomethingN(int id) {
int returnValue = GetSpecialValue(id);
return returnValue;
}
int GetSpecialValue(int id) {
SendToProcessViaSocket(id);
int returnValue = ReceiveSocketAnswer();
return returnValue;
}
Я знаю, что некоторые люди используют libevent
для обратных вызовов, но я не думаю, что вы можете вернуть новые параметры, когда событие вызывается. Кроме того, он является асинхронным и не является частью AOSP build ..
Спасибо!
Вещи работают синхронно по умолчанию - зачем вам нужно что-либо делать? Просто отправьте запрос, затем получите ответ ... – immibis
Кажется, вам нужно использовать блокировку потоков, вы можете создать блокировку, которая вынимается функцией GetSpecialValue(), и освобождается функциями DoSomethingN(). – Alex