Hirdetés

Új hozzászólás Aktív témák

  • cog777

    senior tag

    Leteszteltem, FreeRTOS alatt rendben mukodnek a C++ szalak: Future, Promise, Thread.
    Az elso kettovel az adatcsere is mukodik!
    Nem kell hasznalni a queue-kat...

    Szal inditas:

    void thread_worker()
    {
    while (1)
    {
    auto thread_id = std::this_thread::get_id();
    Serial.printf("Thread ID: %d", thread_id);
    Serial.println(F(""));
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    }
    ...
    // 2 szal inditasa:
    auto th = std::thread(thread_worker);
    th.detach();
    auto th2 = std::thread(thread_worker);
    th2.detach();

    Adat csere:

    void task_producer_fnc(std::promise<data_s> &&signal)
    {
    std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    Serial.println(F("SIGNAL from thread"));
    signal.set_value({.data = 42});
    }
    ...
    std::promise<data_s> signal;
    auto slot = signal.get_future();
    std::packaged_task<void(std::promise<data_s> &&)> task_producer(task_producer_fnc);
    auto future_producer = std::async(std::launch::async, std::move(task_producer), std::move(signal));
    // Var az szignalra
    auto value = slot.get();
    Serial.printf("Data_s Value: %d", value.data);

    Bocsanat, ha trivialis, talan FreeRTOS kezdoknek jol johet. Engem is meglepett hogy hogy ezek a C++ ficsorok mukodnek.

Új hozzászólás Aktív témák