android - std::thread as member of class executing random thread causing an abort at asignate thread -
in class have thread object public membe:
class appmanager{    ...     public:     std::thread m_thread; }; then when initialize thread:
void* bridgefunction(void *pctx) {     ((appmanager*)pctx)->mainappthread();     return 0; }  void appmanager::createappthread(){    m_thread = std::thread(&bridgefunction, this);    m_thread.detach(); } i got abort on std::terminate:
 thread& operator=(thread&& __t) noexcept     {       if (joinable())       std::terminate();       swap(__t);       return *this;     } why? i'm calling detach, tried changing from:
m_thread = std::thread(&bridgefunction, this); to:
m_thread = std::thread(&appmanager::mainappthread, this); and same, works if declare m_thread global , debugged why works, turns out thread declared member execute random thread before assign thread, know because printed id see if joinable:
    auto myid = m_thread.get_id();     std::stringstream ss;     ss << myid;     std::string thread_id = ss.str();      logprintdebug("[thread activity] -  id of thread not created yet: %s", thread_id.c_str());      m_thread = std::thread(&bridgefunction, this);     m_thread.detach(); it prints:
[thread activity] - id of thread not created yet: 1074643408 when declare global thread prints:
[thread activity] - id of thread not created yet::id of non-executing thread i printed id of actual thread , it's different id of random thread, try terminate due part:
if (joinable())  std::terminate(); i'm using visual studio 2015 running android native activity using clang 3.6 , gnu stl libraries, ndk r10e.
i tested same code on windows , id of thread 0, doesn't abort.
thanks
 
 
Comments
Post a Comment