我线程的流程是:
UINT CMyClass::ThreadProc(LPVOID pParam)
{
CMyClass* myclass = (CMyClass*) pParam;
while( !(myclass->m_bStop)) //true)
{
........//My work
}
return 0;
}void MyClass::StartThread()
{
CWinThread* pThread = AfxBeginThread(ThreadProc, this);
if (pThread!=NULL)
{
m_hThread = pThread->m_hThread;
m_bStop = false;
}
}void MyClass::EndThread()
{
//终止线程
m_bStop = true;
WaitForSingleObject(m_hThread, INFINITE)
}
我在MyProjectAPP中调用EndThread(),我单步执行,程序一旦跳到这个函数中,好像整个程序都死了,线程卡在一个地方退不出来了,waitforsingleobject无限等待。为什么?哪会出问题呢?
UINT CMyClass::ThreadProc(LPVOID pParam)
{
CMyClass* myclass = (CMyClass*) pParam;
while( !(myclass->m_bStop)) //true)
{
........//My work
}
return 0;
}void MyClass::StartThread()
{
CWinThread* pThread = AfxBeginThread(ThreadProc, this);
if (pThread!=NULL)
{
m_hThread = pThread->m_hThread;
m_bStop = false;
}
}void MyClass::EndThread()
{
//终止线程
m_bStop = true;
WaitForSingleObject(m_hThread, INFINITE)
}
我在MyProjectAPP中调用EndThread(),我单步执行,程序一旦跳到这个函数中,好像整个程序都死了,线程卡在一个地方退不出来了,waitforsingleobject无限等待。为什么?哪会出问题呢?
解决方案 »
- MSDN都没有的库,求解!!!!!
- microsoft visual c++ runtime library
- MFC对话框嵌入的问题,求助
- 如何用vc创建一个webservice
- 到底什么是程序员?你是程序员么?
- 关于HRESULT类型,我定义的hr变量在失败时该如何返回?
- 程序中使用多线程应用CSocket和CAsyncSocket,但大规模连接时容易出这个错...
- 急,各位大哥帮帮忙,看看我的程序有什么问题。AfxBeingThread传值的问题
- 救救我啊!!! 如何利用适配器 显示特定内容,如对话框?????(UP有分)
- 有没有哪位知道,VC6安装的CDKEY,吉林科技出版社的,在线等
- 请问各位高手,像华表5插件演示那样的OCX里面带有菜单是怎样实现的?先给200分
- 关于插件的问题
{
........//My work
}
的代码例外可以在执行m_bStop = true
时在while( !(myclass->m_bStop)) //true)设置断点,
跟踪,看是否执行了;(可以在m_bStop = true之后加一条语句,在这条语句也设置断点)
UINT CMyClass::ThreadProc(CMyClass *p, LPVOID pParam)加上static就可以了
static UINT CMyClass::ThreadProc(LPVOID pParam)
CWinThread* pThread = AfxBeginThread(ThreadProc, this);
之前
m_bStop是何值?????查查吧!
static UINT ThreadProc(LPVOID pParam);
其次,
m_bStop 应该是volatile的
volatile bool m_bStop;
线程函数声明为static,亦即:
staitc UINT CMyClass::ThreadProc(LPVOID pParam)在StartThread中,把m_bStop放在AfxBeginThread之前:
void MyClass::StartThread()
{
m_bStop = false;
m_hThread = NULL;
CWinThread* pThread = AfxBeginThread(ThreadProc, this);
if (pThread!=NULL)
{
m_hThread = pThread->m_hThread;
}
else
{
m_bStop = true;
}
}void MyClass::EndThread()
{
//终止线程
m_bStop = true;
WaitForSingleObject(m_hThread, INFINITE)
}不知道是否能解决你的问题,祝好运!
以便确认是否退出。TRACE0("ThreadProc End\n");
return 0;
CWinThread* pThread = AfxBeginThread(ThreadProc, this);
m_bStop = false;也确实上AfxBeginThread前面。我的线程工作正常,可就是结束不了,线程运行时,m_bStop一直是false.但是我听从iicup的建议加了
TRACE0("ThreadProc End\n");并在这一句前设了断点
return 0;
但是程序没有停在这里就死了,很明显,线程没有结束。我的主线程有一个窗口,当窗口接受到WM_KEYDOWN消息后,主线程就调用CMyClass::EndThread(),这样做难道不合理么?
我一按键,马上就跳到主线程中了,线程就好像被挂起来了,why?why?why?
m_MyClass.m_bStop = TRUE;后,线程就能正常结束了,放在其他位置不行,我不知道为什么,跟线程的时间片有关系么?
你如果知道为什么,能不能告诉我,e_mail:[email protected]
我先把分分给大家,谢谢
WaitForSingleOjbect();
试试。
按我的理解,这个函数是阻塞的,而且在你的的代码中,没有必要在ENDTHREAD()等线程返回。
WaitForSingleOjbect();
试试。
按我的理解,这个函数是阻塞的,而且在你的的代码中,没有必要在ENDTHREAD()等线程返回。
WaitForSingleOjbect();
试试。
按我的理解,这个函数是阻塞的,而且在你的的代码中,没有必要在ENDTHREAD()等线程返回。