21xrx.com
2024-11-25 03:16:46 Monday
登录
文章检索 我的文章 写文章
C++20 协程示例
2023-06-26 19:06:29 深夜i     --     --
C++20 协程 示例 异步编程 多线程编程

C++20 协程是 C++ 语言中的一个新功能,它可以帮助程序员实现更高效的异步编程方式。下面将介绍一个简单的 C++20 协程示例,以帮助初学者了解如何使用此功能。

示例代码如下:


#include <iostream>

#include <coroutine>

using namespace std;

struct Task {

  struct promise_type {

    Task get_return_object() { return {}; }

    suspend_never initial_suspend() { return {}; }

    suspend_never final_suspend() noexcept { return {}; }

    void unhandled_exception() {}

    void return_void() {}

  };

};

Task coroutineFunction() {

  cout << "Start" << endl;

  co_await suspend_always{};

  cout << "Middle" << endl;

  co_await suspend_always{};

  cout << "End" << endl;

}

int main() {

  auto coro = coroutineFunction();

  coro.resume();

  coro.resume();

  coro.resume();

  return 0;

}

在这个示例中,我们定义了一个名为“Task”的结构体,它有一个名为“promise_type”的嵌套结构体。该结构体是一个协程类型,用于定义我们需要协程执行的代码逻辑。

协程函数“coroutineFunction”使用了 C++20 中的协程功能。它包括了三个输出语句,分别输出“Start”、“Middle”和“End”,并通过“co_await suspend_always{}”挂起协程。这意味着,程序将在每个输出语句处暂停执行,直到下一次调用协程的“resume”函数恢复执行。

在主函数中,我们创建一个名为“coro”的 Task,然后调用“coro.resume()”函数三次,以恢复协程执行,输出每个语句。

运行上述代码,将输出以下结果:


Start

Middle

End

通过这个简单的示例,我们可以看到使用 C++20 协程功能可以非常方便地实现异步编程,而不需要使用传统的回调函数或线程方式。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复