Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将异步转换为同步_C++_Asynchronous_Synchronization - Fatal编程技术网

C++ 将异步转换为同步

C++ 将异步转换为同步,c++,asynchronous,synchronization,C++,Asynchronous,Synchronization,我知道这可能是一个一般性的问题,但我正试图把我的头围绕在这个问题上,我不知道如何解决它 我们有一个项目,以前的sdk对它进行了同步调用,现在我们正在尝试用一个异步工作的新sdk替换该sdk 我们还使用了一个包装器作为应用程序和sdk之间的中间地带。从应用程序的角度来看,我们必须保持“sync aproach”,即它们阻塞并等待响应/数据 新的async SDK有一个主回调线程,在该线程中,我们会根据请求ID收到每个请求的通知 因此,现在我正试图找出一种对sdk进行异步调用的好方法,然后以某种方式

我知道这可能是一个一般性的问题,但我正试图把我的头围绕在这个问题上,我不知道如何解决它

我们有一个项目,以前的sdk对它进行了同步调用,现在我们正在尝试用一个异步工作的新sdk替换该sdk

我们还使用了一个包装器作为应用程序和sdk之间的中间地带。从应用程序的角度来看,我们必须保持“sync aproach”,即它们阻塞并等待响应/数据

新的async SDK有一个主回调线程,在该线程中,我们会根据请求ID收到每个请求的通知

因此,现在我正试图找出一种对sdk进行异步调用的好方法,然后以某种方式阻止,直到某个时间到期/收到命令的结果,并将回调线程上收到的结果返回到发出请求的位置,以便将信息传递给应用程序? 另外,由于sdk不同,有时为了获得相同的数据,我们需要调用多个sdk API

如果您对如何解决该问题的具体案例有一些想法或文档,我将不胜感激

事先非常感谢

假设我们有以下代码:

bool DeviceService::getDeviceInformation (DeviceInfo& devInfo) const
{
    if(CM2MWSession::getInstance().isInit())
    {
         NOTIFICATION_REQUEST_DATA rqst;
         rqst.sender_id = CM2MWSession::getInstance().getClientId();

            get_serial_number(&rqst,NULL))
            get_sim_serial_number(&rqst,NULL))
    }
}
get_serial_number和get_sim_serial_number是对sdk的异步调用

getDeviceInformation是从应用程序端调用的方法

主回调如下所示:

mainCallback(REQUEST_DATA *rqst_data, uint32 size, void *data)
在这里,我们会收到每种请求类型的rqst_数据->专长id)。
从这里开始,我们必须以某种方式返回getDeviceInfo,其中包含此回调返回的数据。

您应该粘贴一些正在转换的代码。在异步调用后等待
条件变量
;让回调函数通知该变量。