В ожидании темы - PullRequest
       1

В ожидании темы

2 голосов
/ 20 сентября 2011

Я использую CreateThread () для своих 4 потоков.
Я хотел бы запустить все свои потоки одновременно, но дождитесь завершения всех 4, прежде чем продолжить работу с основным потоком.

Я использовал int и увеличил его в начале потока, затем уменьшил его в конце, затем в своем основном потоке я использовал цикл while для удержания, пока число превышает определенное значение ... однако это не казалось работать правильно.

Возможно ли это?

Ответы [ 4 ]

7 голосов
/ 20 сентября 2011

Используйте WaitForMultipleObjects с установленным флагом bWaitAll на всех ваших дескрипторах нити. Функция вернется после выхода из всех потоков.

1 голос
/ 20 сентября 2011

Вы можете использовать механизм сигнальных состояний и функцию WaitForMultipleObjects для ожидания того, чтобы сами события или потоки (на которые указывают их дескрипторы) достигли сигнального состояния.

Просто разделяя одну переменную между этими потоками, вы, вероятно, сталкиваетесь с проблемами синхронизации, особенно когда они распределяются по ядрам вашего процессора.

Если вы хотите атомарно изменить общее значение без использования синхронизациимеханизмы, используйте функции «Interlocked *», такие как InterlockedIncrement , хотя это не гарантирует, что проблем не будет.В любом случае, не используйте этот метод в качестве механизма синхронизации.

0 голосов
/ 20 сентября 2011

То, что вы, вероятно, захотите сделать, - это создать четыре потока, а затем вызвать WaitForSingleObject для четырех возвращенных дескрипторов по порядку.Просто убедитесь, что четыре потока завершаются с вызовом ExitThread.

РЕДАКТИРОВАТЬ:

Или, как указано в ответе Хастуркуна, используйте WaitForMultipleObjects ... это было бы разумно.: -)

0 голосов
/ 20 сентября 2011

Если вы хотите, чтобы ваш основной поток ожидал, пока все дочерние потоки завершат свою работу, вы можете использовать:

pthread_join

Редактировать:

Ах, это платформа Windows (я не заметил этого раньше), поэтому вам нужно использовать,

WaitForMultipleObjects

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...