我正在使用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中找到相同的东西。 有人可以建议解决这个问题的最佳方法。
答案 0 :(得分:1)
您有责任在致电ShutdownAPI()之前确保您的请求已完成。这通常只是人为的“示例应用程序”类型的场景中的问题,您直接在main()函数中执行操作。您还需要确保在调用ShutdownAPI之前删除SQS客户端。
On选项是在退出之前使用std::condition_variable
(信号量)进行同步。您可以将信号量传递给回调,并在回调结束时将notify_one()
传递给您。然后,在关机之前,您可以在信号量上调用wait()
。