fbpx ...

Multithreading – Asynchronous tasks

During this training, the modern C++ approach to multithreading is presented - asynchronous tasks. Understanding of std::thread and its drawbacks are beneficial.

We will analyse such code

  #include <future>
#include <iostream>
#include <thread>

void promise_future_approach() {
    std::promise<int> promise;
    std::future<int> future = promise.get_future();
    auto function = [](std::promise<int> promise) {
        // ...
        promise.set_value(10);
    };
    std::thread t(function, std::move(promise));
    std::cout << future.get() << std::endl;
    t.join();
}

void async_approach() {
    auto function = []() {
        // ...
        return 20;
    };
    std::future<int> future = std::async(function);
    std::cout << future.get() << std::endl;
}

int main() {
    promise_future_approach();
    async_approach();
    return 0;
}  
  // example from https://infotraining.bitbucket.io/cpp-thd/async_future.html
#include <chrono>
#include <future>
#include <iostream>
#include <thread>

int main() {
    std::future<int> future = std::async(std::launch::async, []() {
        std::this_thread::sleep_for(std::chrono::seconds(3));
        return 8;
    });

    std::cout << "waiting...\n";
    std::future_status status;
    do {
        status = future.wait_for(std::chrono::seconds(1));

        if (status == std::future_status::deferred) {
            std::cout << "deferred\n";
        } else if (status == std::future_status::timeout) {
            std::cout << "timeout\n";
        } else if (status == std::future_status::ready) {
            std::cout << "ready!\n";
        }
    } while (status != std::future_status::ready);

    std::cout << "result is " << future.get() << '\n';
    return 0;
}  

Your abilities after Multithreading – Asynchronous tasks training

Agenda

Activities

Duration

Form

Order Multithreading – Asynchronous tasks training

Related trainings

Multithreading - threads and data sharing

Lower-level multithreading mechanisms

Multithreading - atomic, conditional_variable, call_once

Other utilities from thread support library that are used in threads or asynchronous tasks

Lambda expressions

Asynchronous tasks usually utilize lambda functions
ninjaletter

Już uciekasz?

Zanim to zrobisz, zapisz się na Ninjaletter, aby wiedzieć, co piszczy w C++. 

Informujemy, iż w celu realizacji usług dostępnych w naszym serwisie, optymalizacji jej treści, dostosowania strony do Państwa indywidualnych potrzeb oraz wyświetlania, personalizacji i mierzenia skuteczności reklam w ramach zewnętrznych sieci reklamowych korzystamy z informacji zapisanych za pomocą plików cookies na urządzeniach końcowych użytkowników. Pliki cookies można kontrolować za pomocą ustawień swojej przeglądarki internetowej. Dalsze korzystanie z naszego serwisu, bez zmiany ustawień przeglądarki internetowej oznacza, iż użytkownik akceptuje stosowanie plików cookies. Więcej informacji zawartych jest w polityce prywatności serwisu.