Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wielowątkowa aplikacja konsolowa

Ostatnio zmodyfikowano 2017-03-21 22:35
Autor Wiadomość
Barol
Temat założony przez niniejszego użytkownika
Wielowątkowa aplikacja konsolowa
» 2017-03-14 20:30:52
Witam wszystkich

Od kilku tyg pracuję na projektem na uczelnię: System autonomicznego sterowania robotem mobilnym Pioneer 3DX w środowisku biurowym.
Krótko o docelowym działaniu programu:
Laboratorium posiada kamerę typu "rybie oko" na środku podwieszone na suficie, za pomocą której rozpoznaje, lokalizuję i śledzę ruch robota.
Robot posiada specjalny znacznik na sobie do identyfikacji. Na jego podstawie lokalizuję robota i orientuję(Pozycja x,y oraz kąt).
Mam napisane wszystkie funkcje analizujące obraz, rozpoznanie robota, rozpoznanie przeszkód, maskowanie otoczenia, tworzenie grafu(siatka wolnego obszaru), 3 algorytmy szukające najkrótszej ścieżki w moim grafie(BFS, DFS, Dijktry), bezpośrednie sterowanie robotem w pętli zamkniętej ze sprzężeniem zwrotnym z kamery- jestem w trakcie pisania tego.

Mój problem polega na tym, że podczas ostatnich testów zorientowałem się, że potrzebuję w mojej aplikacji funkcjonalność wielowątkową dla obsługi:
-prostego interfejsu użytkownika
-ciągłej lokalizacji robota(do sprzężenia zwrotnego dla sterowania)
-sterowania robotem

Jeżeli chodzi o interfejs to mogę jakoś obejść potrzebę oddzielnego wątku dla niego, ale lokalizacja robota i aktualizowanie pozycji (x,y,kąt) muszę mieć cały czas równolegle z sterowaniem robotem.

Niestety moja znajomość C++ i ogólnie programowania jest bardzo słaba i wątki już mnie przerosły. Utknąłem w tym punkcie a bez tego cała praca na marne.

Stąd moje pytanie do doświadczonych programistów:

Jak najlepiej rozwiązać to zagadnienie ?

Przeczytałem kilka tutoriali z wielowątkowości ale nie pojmuję tego, poza tym przykłady w tych tutorialach zajmują max 5 liniowe funkcje liczące jakieś pętle a moje wątki będą składać się z kilku bloków funkcji, z przetwarzaniem i analizą obrazu...

Bardzo proszę o pomoc
Pozdrawiam
P-158996
pekfos
» 2017-03-14 20:56:19
Nie ma znaczenia, czy wątek wykonuje naiwnego fibonacciego na 5 linii, czy jakąś większą masę kodu. Znaczenie mają punkty wspólne wątków, np jakiś wspólny zasób. Jeśli wątki są kompletnie od siebie niezależne, po prostu odpal ich funkcje przez jakieś std::thread i tyle, działa równolegle. Ale jeśli wątki są od siebie jakoś zależne, to może wystąpić cała gama różnych problemów i programowanie tego bez odpowiedniej wiedzy nie jest najlepszym pomysłem.
P-159000
Barol
Temat założony przez niniejszego użytkownika
» 2017-03-14 22:39:15
Niestety potrzebna jest niewielki obszar wymiany danych: Pozycja robota(x,y,kat), oraz obszar komend interfejsu.
Widziałem że jest coś takiego jak Critical Section
P-159005
carlosmay
» 2017-03-14 23:42:38
http://en.cppreference.com/w​/cpp/thread
Poczytaj trochę o tym.

Jeśli masz wspólne dane dla kilku wątków, musisz zadbać, aby nie było wyścigu danych (data races).
P-159010
kmlkamilek
» 2017-03-21 22:35:06
Dorzucę jeszcze od siebie:

Multithreading in c++11

P-159212
« 1 »
  Strona 1 z 1