如题用的开源库jthread(成员函数Start创建线程 有纯虚函数Thread 就是线程函数里掉的)class A : public jthread
{
Thread(){..};
};
class B : public jthread
{
A a;
Thread(){..};
Start()
{
jthread::Start();
a.Start();
}
};B b1,b2;
b1.Start();
b2.Start();如果注释掉蓝字部分,也就是线程b1、b2启动 线程b1.a、b2.a 不启动 正常
如过不注释就会出错 出错地方在下面蓝字部分,这里是b1.a的线程函数(此时b2.Start()还没运行到)#ifndef _WIN32_WCE
UINT __stdcall JThread::TheThread(void *param)
#else
DWORD WINAPI JThread::TheThread(void *param)
#endif // _WIN32_WCE
{
JThread *jthread;
void *ret; jthread = (JThread *)param;
jthread->continuemutex2.Lock();
jthread->runningmutex.Lock();
jthread->running = true;
jthread->runningmutex.Unlock();
jthread->continuemutex.Lock();
jthread->continuemutex.Unlock();
ret = jthread->Thread();
jthread->runningmutex.Lock();
jthread->running = false;
jthread->retval = ret;
CloseHandle(jthread->threadhandle);
jthread->runningmutex.Unlock();
return 0;
}
; Find next lower page and probe
cs20:
sub eax, _PAGESIZE_ ; decrease by PAGESIZE
test dword ptr [eax],eax ; probe page.
jmp short cs10_chkstk endp end
{
Thread(){..};
};
class B : public jthread
{
A a;
Thread(){..};
Start()
{
jthread::Start();
a.Start();
}
};B b1,b2;
b1.Start();
b2.Start();如果注释掉蓝字部分,也就是线程b1、b2启动 线程b1.a、b2.a 不启动 正常
如过不注释就会出错 出错地方在下面蓝字部分,这里是b1.a的线程函数(此时b2.Start()还没运行到)#ifndef _WIN32_WCE
UINT __stdcall JThread::TheThread(void *param)
#else
DWORD WINAPI JThread::TheThread(void *param)
#endif // _WIN32_WCE
{
JThread *jthread;
void *ret; jthread = (JThread *)param;
jthread->continuemutex2.Lock();
jthread->runningmutex.Lock();
jthread->running = true;
jthread->runningmutex.Unlock();
jthread->continuemutex.Lock();
jthread->continuemutex.Unlock();
ret = jthread->Thread();
jthread->runningmutex.Lock();
jthread->running = false;
jthread->retval = ret;
CloseHandle(jthread->threadhandle);
jthread->runningmutex.Unlock();
return 0;
}
; Find next lower page and probe
cs20:
sub eax, _PAGESIZE_ ; decrease by PAGESIZE
test dword ptr [eax],eax ; probe page.
jmp short cs10_chkstk endp end
code内 color不起作用
a.Start();ret = jthread->Thread(); test dword ptr [eax],eax ; probe page.