在使用AWS-cpp-sdk退出程序之前,请等待异步调用返回

时间:2016-09-14 18:20:25

标签: c++ multithreading amazon-web-services asynchronous

我正在使用AWS-cpp-sdk进行POC 为此我编写了一个简单的程序来将消息发送到SQS队列。

我使用SendMessageAsync方法发送如下消息。

sqsClient->SendMessageAsync(sendMessageRequest, &sendMessageCallBack);

我的程序崩溃,因为我的程序在异步方法返回之前退出,Aws::ShutdownAPI(options);终止了由异步方法调用创建的线程。

我发现JAVA的AWS-sdk就这种情况提出了以下建议。 `

/**
 * Shuts down the client, releasing all managed resources. This includes
 * forcibly terminating all pending asynchronous service calls. Clients who
 * wish to give pending asynchronous service calls time to complete should
 * call getExecutorService().shutdown() prior to calling this method.
 */
@Override
public void shutdown() {
    super.shutdown();
    executorService.shutdownNow();
}`

我无法在AWS cpp SDK中找到相同的东西。 有人可以建议解决这个问题的最佳方法。

1 个答案:

答案 0 :(得分:1)

您有责任在致电ShutdownAPI()之前确保您的请求已完成。这通常只是人为的“示例应用程序”类型的场景中的问题,您直接在main()函数中执行操作。您还需要确保在调用ShutdownAPI之前删除SQS客户端。

On选项是在退出之前使用std::condition_variable(信号量)进行同步。您可以将信号量传递给回调,并在回调结束时将notify_one()传递给您。然后,在关机之前,您可以在信号量上调用wait()