У меня есть система, в которой мой singleton-класс порождает поток для вычисления. Если пользователь запрашивает другой расчет, а другой расчет все еще выполняется, я хочу, чтобы он оторвал существующий поток и запустил новый. Но, прежде чем продолжить, он должен дождаться завершения первого потока. У меня все работает, но у меня, похоже, проблема с тем, что работает только один поток. Мой подход заключается в том, что функция StartCalculation вызывает mutex-> Lock(). И поток в деструкторе освобождает блокировку. Это не работает. Правильно ли я полагаю, что если Lock() не может получить блокировку, она вращается и продолжает пытаться восстановить блокировку? Может ли этот Lock() быть вызван из моего основного потока приложений? Любые идеи полезны. Возможно, замки wxMutex являются правильным механизмом для этого.В wxwidgets, как мне сделать один поток, ожидающий завершения другого, прежде чем продолжить?
1
A
ответ
3
Чтобы подождать нить, вам необходимо создать ее для соединения и просто использовать wxThread::Wait()
. Однако я согласен с вышеизложенным замечанием: это не то, что вы обычно делаете вообще, и определенно не из основного потока графического интерфейса, поскольку вы никогда не должны блокировать его, потому что это замораживает пользовательский интерфейс.
Рассмотрите возможность использования message queue, чтобы просто рассказать существующей теме о новой задаче, которую необходимо выполнить вместо этого.
Вы уверены, что используете один и тот же мьютекс? Вам действительно нужно опубликовать код. –
Это то, что вы никогда не делаете, когда используете потоки. Вместо того, чтобы начинать еще один, когда первый завершается, вы просто делаете первый, также выполняете работу второго. –