Strona g?ówna Artyku?y News Work in progress...

Menu g?ówne

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