Wpis z mikrobloga

Czy da się dynamicznie tworzyć wątki w #cpp? Moja klasa w polu prywatnym zawiera vector dla wątków - podczas pewnego zdarzenia chciałbym tworzyć wątek z pętla nieskończoną, a później na żądanie mieć możliwość usunięcia takiego wątku. Szukałem już rozwiązań, ale nie widziałem podobnych sytuacji.
#programowanie #programista15k
  • 24
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Parseval: A ten kod, który Ci podesłałem nie osiąga tego efektu?
Jeśli chcesz na żądanie usuwać wątek to w pętli while dodaj jakąś zmienną typu bool ustawioną na true, a gdy chcesz wątek usunąć ustaw ją na false. Wtedy pętla się zatrzyma i join się wykona.
  • Odpowiedz
  • 0
@r3m0 Kod działa :D tylko w docelowym programie client musi istnieć cały czas i alarm może pojawić się w każdej chwili, nie ma z góry narzuconych wątków. Dlatego jest problem z dołączeniem kolejnych w biegu
  • Odpowiedz
@Parseval: NIe bardzo rozumiem, jak to jest problem z dołączaniem kolejnych?
Przecież teraz jak sobie wołasz setAlarm to tworzy się nowy wątek i możesz se ich stworzyć milion nawet, czy tam tyle ile system pozwoli :)
  • Odpowiedz
  • 0
@r3m0 nie bardzo :D jeśli kod już będzie działał, nagle pojawi się nowy wątek, to nie będzie działał ze względu na join wcześniejszego wątku, który się teoretycznie nigdy nie skończy
  • Odpowiedz
@Parseval: Ale po co chcesz robić od razu ten join?
W formie którą Ci podesłałem to tak dziala, kilka wątków działa jednocześnie, bez czekania aż poprzedni zakończy działanie.
Joinowane są dopiero w destruktorze, bo w sumie po co wczesniej jak jest ich mało.

W ogóle, to jeśli ten wątek jedyne co ma robić to po ustalonym czasie wywalić coś na ekran to po co tam pętla? Nie wystarczy sam sleep_for
  • Odpowiedz
  • 1
@r3m0 wątki docelowo będą kontrolowały pewien parametr i wysyłały maila. Ok już chyba rozumiem jak to działa. Powinno wystaczyć. Dziękuję :)
  • Odpowiedz
@Parseval: nie pamietam jak wyglada implementacja na Windzie, ale Linux i BSD mają implementację 1:1, co oznacza, że każdy wątek to jeden proces. Oznacza to tyle, że odpalanie wątku jest z reguły bardzo kosztowne (nawet z CoW). Dodatkowo jeśli masz więcej wątków niż ncpu to i tak nie mogą one wszystkie działać współbieżnie i będą się tłuc na schedulerze. A jak do tego dorzucisz nielokalność pamięci, to często może się
  • Odpowiedz