.. _module-pw_async_basic:

================
pw_async_basic
================

This module includes basic implementations of pw_async's Dispatcher and
FakeDispatcher.

---
API
---
.. doxygenclass:: pw::async::BasicDispatcher
   :members:

-----
Usage
-----
First, set the following GN variables:

.. code-block::

   pw_async_TASK_BACKEND="$dir_pw_async_basic:task"
   pw_async_FAKE_DISPATCHER_BACKEND="$dir_pw_async_basic:fake_dispatcher"


Next, create a target that depends on ``//pw_async_basic:dispatcher``:

.. code-block::

   pw_executable("hello_world") {
     sources = [ "hello_world.cc" ]
     deps = [
       "//pw_async_basic:dispatcher",
     ]
   }

Next, construct and use a ``BasicDispatcher``.

.. code-block:: cpp

   #include "pw_async_basic/dispatcher.h"

   void DelayedPrint(pw::async::Dispatcher& dispatcher) {
     dispatcher.PostAfter([](auto&){
        printf("hello world\n");
     }, 5s);
   }

   int main() {
     pw::async::BasicDispatcher dispatcher;
     DelayedPrint(dispatcher);
     dispatcher.RunFor(10s);
     return 0;
   }

-----------
Size Report
-----------
.. include:: docs_size_report
