gpt4 book ai didi

c++ - 同步和异步 API

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:49 25 4
gpt4 key购买 nike

我正在开发一个库,它提供一些耗时的服务。我需要每个 API 有两个版本,一个用于同步函数调用,另一个用于异步。

图书馆用户应该决定使用哪个版本,服务结果可能对系统运行的继续(同步调用)至关重要。可能需要在不同的工作线程中完成相同的操作,因为它的结果不需要继续(异步调用)。

这种方法有什么问题?

有没有更好的方法?

是否有为同一 API(不使用外部事件或线程)同时提供同步/异步的流行库?

这是我要提供的示例:

enum StuffStatus
{
SUCCEED,
FAILED,
STILL_RUNNING
};
class IServiceCallback
{
public:
void lengthyStuffCallback(StuffStatus status);
};

class MyServiceClass
{
public:
StuffStatus doSomeLengthStuff(IServiceCallback* callback)
{
if( callback == NULL ) // user wants sync. call
{
// do all operations in caller context
return SUCCEED;
}else{
// save the callback, queue the request in a separate worker thread.
// and after the worker thread finishes the job it calls callback->lengthyStuffCallback(SUCCEED) from its context.
return STILL_RUNNING;
}
}
};

编辑:作为“Matthieu M.”提到,在我的服务中,我需要使用 Continuation Passing Style 异步(API 完成后回调)。

最佳答案

您可能要考虑 提供同步操作并建议用户使用std::future<...> (如果您不能使用 C++ 2011,则使用类似的工具)如果他们想要调用的异步版本!

std::future<StuffStatus> async(std::async(&MyServiceClass::doSomeLengthyStuff,
&service));
// do other stuff
StuffStatus status = async.get(); // get the result, possibly using a blocking wait

关于c++ - 同步和异步 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14093176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com