Strona główna Artykuły News Work in progress...
Work in progress...
Ocena użytkowników: / 2
SłabyŚwietny 
Wpisany przez Freddie Chopin   
Piątek, 29 Sierpień 2014 19:37

O tym, żeby coś takiego zrobić, myślałem już od dawna... Jak jednak wiadomo od zamiarów do konkretów droga jest dosyć daleka, szczególnie przy niedoborze czasu wolnego. W końcu się jednak zebrałem, więc poniżej mała "zajawka" tego czym obecnie (między innymi rzeczami oczywiście) się zajmuję.

bool ThreadFunctionTypesTestCase::run_() const
{
    using scheduler::makeStaticThread;

    // thread with regular function
    {
        uint32_t sharedVariable {};
        constexpr uint32_t magicValue {0x394e3bae};

        auto regularFunctionThread = makeStaticThread<testThreadStackSize>(UINT8_MAX,
                regularFunction, std::ref(sharedVariable), magicValue);
        regularFunctionThread.start();
        regularFunctionThread.join();

        if (sharedVariable != magicValue)
            return false;
    }

    // thread with state-less functor
    {
        uint32_t sharedVariable {};
        constexpr uint32_t magicValue {0x2c2b7c30};

        auto functorThread = makeStaticThread<testThreadStackSize>(UINT8_MAX, Functor{},
                std::ref(sharedVariable), magicValue);
        functorThread.start();
        functorThread.join();

        if (sharedVariable != magicValue)
            return false;
    }

    // thread with member function of object with state
    {
        constexpr uint32_t magicValue {0x33698f0a};
        Object object {magicValue};

        auto objectThread = makeStaticThread<testThreadStackSize>(UINT8_MAX,
                &Object::function, std::ref(object));
        objectThread.start();
        objectThread.join();

        if (object.getVariable() != magicValue)
            return false;
    }

    // thread with capturing lambda
    {
        uint32_t sharedVariable {};
        constexpr uint32_t magicValue {0x24331acb};

        auto capturingLambdaThread = makeStaticThread<testThreadStackSize>(UINT8_MAX,
                [&sharedVariable, magicValue]()
                {
                    sharedVariable = magicValue;
                });
        capturingLambdaThread.start();
        capturingLambdaThread.join();

        if (sharedVariable != magicValue)
            return false;
    }

    return true;
}

Intrygujące? Ciekawe? Interesujące? (;

Jest to fragment testów funkcjonalnych projektu open-source, który obecnie jest we wczesnej fazie alpha (pierwsza linijka kodu powstała zaledwie miesiąc temu), jednak podstawowe rzeczy - jak na przykład te pokazane we fragmencie kodu poniżej - działają (na STM32F4) i to całkiem dobrze (; Na razie nie ma jeszcze o czym więcej pisać, w zasadzie jedynym śladem istnienia tego projektu jest repozytorium na github i ten właśnie news... Jak w każdym projekcie open-source tak i w tym najważniejsi są użytkownicy i szeroko pojęta społeczność, więc wszelkie pomysły, uwagi, opinie itp. możecie wstawiać tu - w komentarzach - albo na github. Jakby ktoś miał ochotę pokodować, to oczywiście również zapraszam do współpracy - projekt jest otwarty. Prace trwają, więc "stay tuned" (;

Cały plik źródłowy z którego pochodzi powyższy fragment można obejrzeć pod tym linkiem.

Zmieniony: Niedziela, 22 Marzec 2015 21:18