В wxwidgets как заставить один поток ждать завершения другого, прежде чем продолжить? - PullRequest
1 голос
/ 23 января 2010

У меня есть система, в которой мой синглтон-класс порождает поток для вычисления. Если пользователь запрашивает другое вычисление, в то время как другое вычисление все еще выполняется, я хочу, чтобы он разрушил существующий поток и начал новый. Но следует дождаться полного завершения первого потока, прежде чем продолжить. У меня все работает, но, похоже, у меня проблема с тем, чтобы убедиться, что работает только один поток. Мой подход заключается в том, чтобы функция StartCalculation вызывала mutex-> Lock (). И поток в деструкторе снимает блокировку. Это не работает. Прав ли я, предполагая, что если Lock () не может получить блокировку, он вращается и продолжает пытаться восстановить блокировку? Можно ли вызвать этот Lock () из моего основного потока приложения? Любые идеи полезны. Может быть, блокировка wxMutex - правильный механизм для этого.

1 Ответ

3 голосов
/ 23 января 2010

Чтобы дождаться потока, вам нужно создать его присоединяемым и просто использовать wxThread::Wait(). Однако я согласен с замечанием выше: это не то, что вы обычно делаете вообще, и определенно не из основного потока GUI, так как вы никогда не должны блокировать его, потому что это замораживает интерфейс.

Попробуйте использовать очередь сообщений , чтобы просто сообщить существующему потоку о новой задаче, которую он должен выполнить вместо этого.

...