·········以下程序皆基于MFC·······
子线程RC及共享RC定义:
HGLRC m_hRC;      //OpenGL绘制描述表
HGLRC hRCShareing;   //用于分享m_hRC的资源 //生成绘制描述表
m_hRC = wglCreateContext(m_pDC->GetSafeHdc());
hRCShareing = wglCreateContext(m_pDC->GetSafeHdc());
wglShareLists(hRCShareing, m_hRC);
//置当前绘制描述表
wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);        m_pDC为主窗口客户区DC,下面都同此
主线程读取文件时,开启加载纹理子线程:
        AfxBeginThread(ThreadReadTex,NULL);   //启动读取纹理线程
子线程入口:
UINT ThreadReadTex(LPVOID lpParam)
{
        //````````
wglMakeCurrent(m_pDC->GetSafeHdc(), hRCShareing);        //```````加载过程 wglMakeCurrent(NULL, NULL); AfxMessageBox("纹理加载完成!");
return 0;
}
返回主线程
void CGaoView::OnDraw(CDC* pDC)
{
CGeoMSDNetDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
        wglMakeCurrent(pDC->m_hDC,f_globle.m_hRC);
        
        //``````绘制函数 SwapBuffers(pDC->GetSafeHdc());
}
问题就出在红色代码处,子线程开启、运行时整个程序都没问题。就是当子线程结束瞬间,程序运行到标记代码处,停滞大概3秒,期间整个主窗口不能作任何操作。
本人OpenGL新手,线程学的也不好,请各位朋友、大神指教!