Я использую CreateThread() для моих 4 потоков.
Я бы хотел запустить все мои потоки одновременно, но дождаться завершения всех 4 до продолжения основного потока.
Я использовал int и увеличил его в начале потока, а затем уменьшил его в конце, а затем в своем основном потоке я использовал цикл while, чтобы удерживать, пока число превышает определенное значение ... однако это didn Кажется, что он работает правильно.
Возможно ли это?Ждите нитей
ответ
Вы можете использовать механизм signaled states и функцию WaitForMultipleObjects, чтобы подождать сами события или темы (с указанием их ручками), чтобы достичь состояния сигнализации.
Просто используя одну переменную среди этих потоков, вы, вероятно, сталкиваетесь с проблемами синхронизации, особенно когда они распределены между ядрами вашего процессора.
Если вы хотите изменить общее значение атомарно без использования механизмов синхронизации, используйте функции «Блокировка *», такие как InterlockedIncrement, хотя это не полностью гарантирует отсутствие проблем. Не используйте этот метод в качестве механизма синхронизации в любом случае.
Если вы хотите, чтобы ваш главный поток ждет, пока все дочерние потоки не завершить свою работу, то Вы можете использовать:
Edit:
Ах это окно платформа (Я не заметил этого раньше), поэтому вам необходимо использовать,
Использование WaitForMultipleObjects
с набором bWaitAll
флага, на всех ваши резьбы ручек. Функция будет возвращаться после выхода всех потоков.
Что вы, скорее всего, захотите сделать, это создать четыре потока, а затем вызвать WaitForSingleObject
на четырех возвращенных ручках. Просто убедитесь, что четыре потока выходят с вызовом на ExitThread
.
EDIT:
Или, как указано в ответе Hasturkun, используйте WaitForMultipleObjects
... что бы быть умным. :-)
- 1. Ждите основную нить до тех пор, пока один из многих сигналов нитей в Java
- 2. Ждите флага
- 3. Ждите директивы
- 4. Ждите исполнителей
- 5. Ждите NSThread
- 6. Не ждите ответа arduino
- 7. Ждите выхода актера()
- 8. Ждите специального нажатия клавиши
- 9. Ждите действия пользователя
- 10. Ждите статического инициализатора
- 11. Ждите задач в Ada
- 12. Ждите метода возврата true
- 13. Ждите окончания всех тем:
- 14. AWS WaitCondition Ждите предоставления
- 15. Ждите действия для отображения
- 16. Ждите завершения процесса
- 17. Ждите фонового процесса
- 18. Node.js/Redis - Ждите подключения?
- 19. Ждите события javascript WebDriver
- 20. Ждите в javascript
- 21. Ждите ввода пользователя?
- 22. Ждите ввода пользователя
- 23. Ждите уведомления асинхронный вызов
- 24. Ждите окончания пользовательского интерфейса
- 25. TThread Ждите ввода пользователя
- 26. Ждите нажатия кнопки JButton
- 27. Ждите в действии?
- 28. Ждите canvas.toBlob() перед продолжением
- 29. drawRect, ждите заказа
- 30. Ждите элемента в Protractor
Вам не нужны события, потоки подлежат объектам в Windows. – Hasturkun
Да, я забыл об этом и соответствующим образом изменил ответ. :) – macbirdie