问题描述
概述:
我有一个客户端 - 服务器实现,它使用 DBus(sdbus-c++) 向服务器发送异步请求。现在,我的服务器与硬件 API 进行交互,这些 API 同步运行,并且还需要花费大量时间来生成回复。所以我在服务器上有一个 std::queue
,它保存收到的所有异步请求,并一一处理它们。服务端处理后,以为发送的请求注册的回调形式发回回复。
#client.h
class Client
{
Client();
~Client();
void sendRequestA()
{
... use DBus async call to send request to server
}
void sendRequestB() {...}
protected:
virtual void replyCallbackA(const uint8_t& status) = 0 ; // ... callback invoked by the DBus server
virtual void replyCallbackB(const uint8_t& status) = 0 ;
}
Ì 在使用 std::async
测试此特定用例时遇到问题。
#test.cpp
//std::future<void> gFuture;
class ClientTest : public Client
{
ClientTest();
~ClientTest();
std::future<void> m_future;
virtual void replyCallbackA(const uint8_t& status) override
{
std::cout<<"replyCallbackA status = "<< status<< "\n";
m_future.get();
//gFuture.get();
}
virtual void replyCallbackB(const uint8_t& status) override
{
std::cout<<"replyCallbackB status = "<< status<< "\n";
m_future.get();
//gFuture.get();
}
}
int main()
{
ClientTest cTest;
cTest.m_future = std::async(std::launch::async,&ClientTest::sendRequestA,&cTest);
cTest.m_future = std::async(std::launch::async,&ClientTest::sendRequestB,&cTest);
//gFuture = = std::async(std::launch::async,&cTest); -- no change in behavior with use of a global std::future.
}
我的理解是,sendRequestA
和 sendRequestB
将被调用,并且回调函数也将被调用。
但是,在这种情况下,main
在调用 sendRequestA
& sendRequestB
后立即退出并且未收到回调响应。
编辑:我也尝试将全局变量用于 std::future
,但行为是相同的。
谁能告诉我我的理解哪里有问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)