C ++中的延迟执行策略

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++中的延迟执行策略相关的知识,希望对你有一定的参考价值。

我有一个回调实现,其中一个未知的第三方调用我的代码中的函数指针。

但是,很多语言中的一个问题是在函数返回后触发代码。例如,当调用回调并且我必须删除调用对象(并且,在这种情况下,重新初始化它)时,从回调返回将导致异常。

假设我无法挂钩并且我不拥有/无法修改调用回调的代码,在函数返回后执行代码的最佳方法是什么?

我能想到这样做的唯一真正方法是设置某种状态机并让工作线程检查状态。但是,我预见到的问题是竞争条件,在重置回调返回和调用对象重置之间调用回调。

是否有任何我不知道的功能,或者这是实现这种结果的最有效方式?

答案

它需要c ++ 11或更新版本。但这就是我要做的。您可以将其重写为使用函数指针,以便它可以在较旧的c ++版本上运行

#include <functional>
#include <iostream>

#define CONCACT_IMPL(x , y) x##y
#define CONCAT(x, y) CONCACT_IMPL(x, y)
#define deffered(x) auto CONCAT(__deffered, __COUNTER__)  = Defer(x);

struct Defer {
    Defer(std::function<void(void)> pFunc) : func(pFunc) {};
    std::function<void(void)> func;
    virtual ~Defer(){
        func();
    }
};

int main() {

    deffered([] () {
        std::cout << "deffered" << std::endl;
    });

    std::cout << "now" << std::endl;
}

输出 - >

now
deffered

以上是关于C ++中的延迟执行策略的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中的异步执行策略

C程序存储结构

C++或C中怎么通过代码执行mongodb中的命令行,把执行结果带回。

C++ lazy evaluation(延迟计算或惰性求值)介绍

c语言字符串中的代码怎么执行?

使用lambda编程之延迟执行