Wątek error R6010
Ostatnio zmodyfikowano 2015-10-18 19:38
MonoMisiek Temat założony przez niniejszego użytkownika |
Wątek error R6010 » 2015-10-17 17:15:29 Robię refaktoryzację kodu, a przy okazji przechodzę z VS10 na VS12 no i trafiła mi się dziwna rzecz. Chodzi o to, że główna pętla programu się kończy, podczas gdy wątek jeszcze działa i wskakuje error... Ta pułapka jest opisana tutaj. https://www.tutorialcup.com/cplusplus/multithreading.htm Wątek - jest to nieskończona pętla while(1)... On ma działać cały czas, bez żadnej synchronizacji na nikogo nie czekać, oraz żeby nikt na niego nie czekał. No i dlatego nie mogę zrobić join!
Wątek odpalam tylko 1 raz w głównej pętli programu.
Jestem przekonany że winny jest VS12, bo wcześniej zawsze robiłem w ten sposób i to działało. Joina używałem tylko wtedy, gdy sytuacja tego wymagała...
Tak więc jak można się pozbyć tego błędu bez użycia join? |
|
Monika90 |
» 2015-10-17 18:53:20 Zawsze winny jest Microsoft.
Możesz użyć detach, ale to co robisz jest prawie na pewno bez sensu. |
|
MonoMisiek Temat założony przez niniejszego użytkownika |
» 2015-10-17 19:48:51 Rzeczywiście, ajaj nie doczytałem do detach, który całkowicie rozwiązuje mój problem.
Tylko nie rozumiem dlaczego robienie tak nie ma sensu? Mam np program który steruje pracą jakiejś maszyny. No i mam jakiś czujnik (np temperatury) który może spowodować alarm w każdym możliwym momencie... Czujnik z temperaturą działa cały czas i niezależnie od reszty. Nie czeka na główny wątek, tylko cały czas bada temperaturę. Główny wątek też nie czeka, tylko bierze ostatnią znaną.
|
|
C-Objective |
» 2015-10-18 19:38:14 Hah :) to czemu nie zrobić w głównym wątku ? A jak już to zostaw wątek na pastwę losu, tj. Rozpocznij porzuć i pod koniec (koło return) wstaw _endthread() |
|
« 1 » |