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

Wątek error R6010

Ostatnio zmodyfikowano 2015-10-18 19:38
Autor Wiadomość
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?
P-138724
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.
P-138734
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ą.
P-138738
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()
P-138820
« 1 »
  Strona 1 z 1