Jak czekać, aż wątek C++ 11 zostanie uruchomiony po utworzeniu? Wydaje się, że nie ma na to żadnej metody, w przeciwieństwie do innych bibliotek wątków (takich jak Qt), które oferują specjalną metodę sprawdzania, czy wątek jest uruchomiony, czy nie.Oczekiwanie na wątek C++ 11 do uruchomienia
Odpowiedz
Definicja języka wymaga, aby nowy wątek został uruchomiony przed powrotem konstruktora. Formalnie jest to [thread.thread.constr]/5: "Zakończenie wywołania konstruktora synchronizuje się z początkiem wywołania kopii f."
Nie jestem pewien, dlaczego musisz poczekać, aż zacznie się w pierwszej kolejności, ale jeśli to zrobisz, musisz użyć muteksu, warunku i flagi wskazanej, czy jest ona uruchomiona, czy nie. W nowo utworzonym wątku zablokuj muteks, ustaw flagę na "true" i powiadom kelnera (y) na zmiennej warunkowej. W kodzie, który tworzy wątek, zablokuj muteks i sprawdź flagę. Jeśli flaga jest "prawdziwa" - twoja nić jest uruchomiona, jeśli jest "fałsz", poczekaj na zmienną warunkową i powtórz raz obudzony.
Dzięki. Miałem nadzieję, że jest lepsze rozwiązanie, którego mi brakuje, ale chyba nie. –
Lub użyj obiektu czekającego, takiego jak zdarzenie w Win32, wtedy nie potrzebujesz muteksu lub flagi, tylko zdarzenie działające jako warunkowe. Lub po prostu używaj flagi bool samodzielnie i masz pętlę tworzenia wątku, dopóki flaga nie zostanie ustawiona. Nie trzeba go blokować. –
@pilcrow: a jeśli nie? –
- 1. Czy oczekiwanie na Scala Future blokuje wątek?
- 2. Co C++ 11 uważa za "wątek"?
- 3. Jak zakończyć wątek w C++ 11?
- 4. C++ 11 Wątek: wiele wątków oczekujących na zmienną warunku
- 5. Oczekiwanie na zdarzenie do wykonania
- 6. C++ 11 alternatywa pthread_cond_timedwait
- 7. C# Oczekiwanie na wiele zdarzeń w Producer/Consumer
- 8. Oczekiwanie na zakończenie polecenia w języku C#
- 9. C++ 11 Równoważna do Boost.Format
- 10. Indeks najdłuższego uruchomienia C#
- 11. portowanie isnan do C++ 11
- 12. oczekiwanie na obserwowalne
- 13. JavaFX - oczekiwanie na zakończenie zadania
- 14. Propagowanie sygnału (SIGINT) do C++ 11 wątków
- 15. Oczekiwanie na wiele zdarzeń
- 16. Oczekiwanie na AsyncStorage.getItem()
- 17. Jak anulować oczekiwanie w select() na Windows
- 18. Oczekiwanie na zakończenie zadania
- 19. Blokowanie i oczekiwanie na zdarzenie
- 20. Oczekiwanie na QUnit testuje
- 21. Wątek bezpieczny stos C++
- 22. Powrót do widoku z Async Oczekiwanie na
- 23. Oczekiwanie na załadowanie okna dziecięcego do końca
- 24. Pierwsze Jasmine do uruchomienia na stronie serwera
- 25. Oczekiwanie na QMutex zapewnia
- 26. Oczekiwanie na zakończenie zdarzenia
- 27. asp.net oczekiwanie na localhost na zawsze
- 28. Początkujący wątek w C#
- 29. C++ 11 Async seg fault
- 30. Oczekiwanie na serwis media.audio_policy na boot androida
Jaki jest twój przypadek użycia? – Casey
Tak, proszę opisać przypadek użycia. Wątki C++ 11 są "uruchamiane" zaraz po ich utworzeniu. Czy chcesz rozszerzyć interfejs API wątków o jakieś pojęcie "żywy/w toku" zamiast "zakończony/zakończony"? Czy chcesz zsynchronizować wątek z innym? Czy chcesz, aby nowe wątki były "pauzowane", dopóki nie zostanie jawnie rozpoczęte? Itd. – pilcrow
Co oznacza "właściwie zacząć"? – Casey