Как это терпит неудачу? Я не знаком с wxTextCtrl, но если он не имеет встроенной синхронизации (т. Е. Его потокобезопасности), это может быть большой проблемой. Самый простой способ защитить один ресурс, подобный этому, - использовать мьютекс. В следующем примере показано, что вы можете сделать в каждом потоке, чтобы убедиться, что только один из них обращается к этому ресурсу (окну вывода) за раз.
// In each thread's initialization:
HANDLE mutexHandle = CreateMutex(0,FALSE,"__my_protecting_mutex__");
// Whenever you use the debug output:
WaitForSingleObject(mutexHandle, /* Timeout if you like. */ 0xFFFFFFFF );
// Do our printing here.
ReleaseMutex(mutexHandle);
// In each thread's cleanup:
CloseHandle(mutexHandle);
Таким образом, это в основном гарантирует, что между ожиданием и выпуском может быть только один поток. Теперь, если ваша проблема на самом деле связана с wxTextCtrl, мне понадобятся некоторые подробности.
Редактировать: Я только что понял, что то, что я опубликовал, относится только к Windows, и, возможно, вы не в Windows! Если нет, у меня нет опыта работы с другими методами синхронизации платформ, но у boost есть несколько общих библиотек, которые не зависят от платформы.