Ссылаясь на эта почта, У меня чистый виртуальный класс:
#define CALL __stdcall
class IIEvent
{
virtual ~IIEvent() {}
virtual void CALL ev1(int) = 0;
virtual void CALL ev2(int) = 0;
};
Этот интерфейс используется для реализации шаблона публикации-подписчика. Библиотека звонит IIEvent
функция в отдельном потоке.
void generateEvent1( int i )
{
// mListeners is a std::vector< IIEvent* >
for ( auto& f : mListeners )
{
std::thread t( &IIOEvent::ev1, f, t ) );
t.detach();
}
}
Но это дает мне ошибку времени компиляции (в данном случае я использую MinGW): проблема, кажется, в соглашении о вызовах. Если я уберу соглашение о вызовах, все будет работать нормально.
Итак, как я могу запустить поток функции с определенным соглашением о вызовах?
Замечания: здесь нужно соглашение о вызовах, чтобы убедиться, что библиотека работает с другими компиляторами.
Благодаря Кори Нельсону решение может быть:
void generateEvent1( int i )
{
// mListeners is a std::vector< IIEvent* >
for ( auto& f : mListeners )
{
std::thread t( [f, i] ()
{
f->ev1( b );
});
t.detach();
}
}
Но это, кажется, вызывает сбой во время выполнения моего приложения …
Задача ещё не решена.
Других решений пока нет …