Я много читал об этом, но пока не нашел решения.
Моя проблема в том, что когда я пытаюсь это сделать, я теряю контроль.
hiloEscucha = std::thread(&PlayerClientSingleton::Run, this);
Я работаю с классом, реализующим одноэлементный шаблон в многопоточной среде. Мой проект скомпилирован в библиотеку DLL. Все работает отлично, кроме создания потоков.
Я пробовал это (ссылка), и этот пример отлично работает в автономном консольном приложении, но мой проект работает как библиотека DLL.
Когда я загружаю его из других C++ и С# проектов, он отлично работает, а при вызове других методов он тоже работает. Проблема возникает, я вызываю std::thread
.
Вот самые важные части моего кода:
class PlayerClientSingleton : public PlayerClient {
public:
static PlayerClientSingleton* instance(void) {
std::call_once(m_onceFlag, [] { m_instance = new PlayerClientSingleton; });
return m_instance;
}
//Initialize is called from the .dll initialization (Dllmain)
bool initialize(void) {
runThread();
}
void runThread(void) {
m_thread = std::thread(&PlayerClientSingleton::Run, this);
if (m_thread.joinable()) {
m_thread.detach();
}
}
static PlayerClientSingleton* m_instance;
static std::once_flag m_onceFlag;
std::thread m_thread;
}
class PlayerClient {
protected:
virtual void Run() {
while (!m_threadEdn) {
doSomething();
}
}
}
Любая идея, почему это не работает?
Я думаю, что это связано с тем, что вы пытаетесь создать поток из DllMain, см. Также: