我想找开一个比较大的图像文件,打开时我快速只读取其中一部分,然后开辟一个工作线程用来处理整个数据并生成一个预览,问题就在这个线程中,我启动线程的代码是
HANDLE hThread = (HANDLE)_beginthread(BuildOverViewThread,0,this);
线程的代码是
void BuildOverViewThread(LPVOID pParam)
{
CDataBlock* poBlock = (CDataBlock*)pParam;
poBlock->BuildOverView();
poBlock->m_bGenOverView = true;
_endthread();
}
在CDataBlock的BuildOverView()函数中,程序开始好好的,处理几行数据后就报异常错误,这是怎么回事,如何解决?如果我在HANDLE hThread = (HANDLE)_beginthread(BuildOverViewThread,0,this);
下面加一句
WaitForSingleObject(hThread,INFINITE);
就什么错误也不报了,但根本体现不出来线程的好处,程序会一直等这个工作线程做完再继续向下执行,我希望的是开辟这个工作线程后,就不管它,愿意什么时候结束就什么结束,不要影响我后面的操作,可是在调试过程中,开始能看到这种效果,过一会就不行了,然后就再不能恢复了,总是报错,请问这个该如何解决呢?
HANDLE hThread = (HANDLE)_beginthread(BuildOverViewThread,0,this);
线程的代码是
void BuildOverViewThread(LPVOID pParam)
{
CDataBlock* poBlock = (CDataBlock*)pParam;
poBlock->BuildOverView();
poBlock->m_bGenOverView = true;
_endthread();
}
在CDataBlock的BuildOverView()函数中,程序开始好好的,处理几行数据后就报异常错误,这是怎么回事,如何解决?如果我在HANDLE hThread = (HANDLE)_beginthread(BuildOverViewThread,0,this);
下面加一句
WaitForSingleObject(hThread,INFINITE);
就什么错误也不报了,但根本体现不出来线程的好处,程序会一直等这个工作线程做完再继续向下执行,我希望的是开辟这个工作线程后,就不管它,愿意什么时候结束就什么结束,不要影响我后面的操作,可是在调试过程中,开始能看到这种效果,过一会就不行了,然后就再不能恢复了,总是报错,请问这个该如何解决呢?
把poBlock的数据放到堆上,并保证线程处理的时候一致数据有效
new --- delete的方式
线程结束后在delete
http://topic.csdn.net/u/20081208/15/F518FDE4-79A9-4182-B6E9-AA3FCE002212.html
http://topic.csdn.net/u/20081212/09/FA36D137-7C94-447C-A854-B1BC06A33240.html