Na chacie jest ograniczenie do 500 znaków więc napiszę tutaj:
Wykombinowałem tak: tworze klasę bazową TaskManager ze statyczną metodą Dispatcher przyjmującą void*. Dziedziczę po tej klasie i tworze w niej kilka obiektów Task. W konstruktorze na każdym tasku wywołuję metodę Create która przyjmuje delegata na metode w mojej klasie dziedziczacej po TaskManager. Task w metodzie Create tworzy docelowy task freertosa przekazując jako funkcję statyczna funkcje z przekazanego this => this.Dispatcher i delegata jako parametr. Czyli freertos wywoluje tak naprawde funkcje statyczna z parametrem w ktorej rzutuję sobie parametr na delegata i wywoluje docelowa metode na obiekcie. Może tak być?
Member function pointer i delegat + freeRTOS
- mokrowski
- User

- Posty: 190
- Rejestracja: czwartek 08 paź 2015, 20:50
- Lokalizacja: Tam gdzie Centymetro
Re: Member function pointer i delegat + freeRTOS
Tak. Może tak być.
Jeśli jednak rozważasz całkowite oddzielenie się od "warstwy proceduralnej", możesz potraktować każdy task jak wątek. Wtedy konwencja z C++11
Jeśli jednak rozważasz całkowite oddzielenie się od "warstwy proceduralnej", możesz potraktować każdy task jak wątek. Wtedy konwencja z C++11
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek
Re: Member function pointer i delegat + freeRTOS
Udało mi się zaimplementować delegaty stąd:
http://www.etlcpp.com/function_tutorial.html
Dispatchera przeniosłem do klasy Task. Póki co delegaty tworzę w klasie z wątkami, ale jutro przerzuce je do klasy Task, i wystarczy deklaracja z szablonem Task<KlasaZWatkami> jakisTask; i potem w metodzie jakisTask.Create(&KlasaZWatkami::Metoda, inne parametry); i wsio.
Możesz odrobinkę rozwinąć, żebym wiedział gdzie/czego szukać?
http://www.etlcpp.com/function_tutorial.html
Dispatchera przeniosłem do klasy Task. Póki co delegaty tworzę w klasie z wątkami, ale jutro przerzuce je do klasy Task, i wystarczy deklaracja z szablonem Task<KlasaZWatkami> jakisTask; i potem w metodzie jakisTask.Create(&KlasaZWatkami::Metoda, inne parametry); i wsio.
mokrowski pisze:Jeśli jednak rozważasz całkowite oddzielenie się od "warstwy proceduralnej", możesz potraktować każdy task jak wątek. Wtedy konwencja z C++11
Możesz odrobinkę rozwinąć, żebym wiedział gdzie/czego szukać?
- mokrowski
- User

- Posty: 190
- Rejestracja: czwartek 08 paź 2015, 20:50
- Lokalizacja: Tam gdzie Centymetro
Re: Member function pointer i delegat + freeRTOS
W C++11 do konstruktora wątku przekazujesz... hm... lepiej to napiszę w pseudokodzie:
Jak widzisz start wątku następuje po przekazaniu "w stylu statycznym" wskaźnika na metodę (choć jest ona obiektowa a nie statyczna), przekazanie.. "this'a" oraz argumentów. Co ciekawe że spójne z (znów pseudokod):
.. po prostu nie przekazujesz "this'a"
Moim zdaniem eleganckie i właśnie o tym wspomniałem...
Kod: Zaznacz cały
class MojaKlasa {
public:
void work_method(int arg1, int arg2);
};
// w main()
auto m = MojaKlasa();
// start wątku...
std::thread(&MojaKlasa, &m, arg1, arg2);
Jak widzisz start wątku następuje po przekazaniu "w stylu statycznym" wskaźnika na metodę (choć jest ona obiektowa a nie statyczna), przekazanie.. "this'a" oraz argumentów. Co ciekawe że spójne z (znów pseudokod):
Kod: Zaznacz cały
void work_function(int arg1, int arg2) {
// ciało funkcji
}
// w main()
// start wątku...
std::thread(&work_function, arg1, arg2);
.. po prostu nie przekazujesz "this'a"
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek
Wróć do „Programowanie STM w C/C++”
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości