Как запустить поток с функцией другого соглашения о вызовах

Ссылаясь на эта почта, У меня чистый виртуальный класс:

#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();
}
}

Но это, кажется, вызывает сбой во время выполнения моего приложения …

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]