我在Page0这个对话框里建的TemShow六个对话框(创建代码写在page0.cpp里)
public://page0.h
vector<TemShow*> m_vptemshow1;//vector的变量
TemShow *ptemshow1;//六个对话框变量指针
TemShow *ptemshow2;
TemShow *ptemshow3;
TemShow *ptemshow4;
TemShow *ptemshow5;
TemShow *ptemshow6;
然后创建一个线程,
DWORD WINAPI Cpage0::Page0Show(LPVOID lpParameter)////page0显示线程
{
Cpage0 *pPage0 = (Cpage0*)(lpParameter);
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if(g_bIsQuit)
{
break;
}
CString sWenDu1 = ("TS1(度)");CString sWenDu2 = ("TS2(度)");CString sWenDu3 = ("TS3(度)");
CString sNiuJiu = ("扭矩(Nm)");CString sWenDu4 = ("TM1(度)");CString sSpeed = ("转速(R/Min)");
pPage0->m_vptemshow1[0]->ShowData(sWenDu1);
pPage0->m_vptemshow1[1]->ShowData(sWenDu2);
pPage0->m_vptemshow1[2]->ShowData(sWenDu3);
pPage0->m_vptemshow1[3]->ShowData(sSpeed);
pPage0->m_vptemshow1[4]->ShowData(sWenDu4);
pPage0->m_vptemshow1[5]->ShowData(sNiuJiu);
TRACE("page0show successful\n");
Sleep(100);
ReleaseMutex(hMutex);
}
return 0;
}
1)DEBUG下说vector subscript out of range。可是我int len1 = m_vptemshow1.size();TRACE("len1 = %d",len1);得到len1为6啊,没越界啊!怎么还就内存溢出了呢?
2)我有多个线程,程序退出时,
线程 'Win32 线程' (0x2370) 已退出,返回值为 0 (0x0)。
线程 'Win32 线程' (0x1610) 已退出,返回值为 0 (0x0)。
线程 'Win32 线程' (0x218c) 已退出,返回值为 1 (0x1)。
返回非0是不是就有问题啊,怎么找到是哪个线程出了问题呢?
public://page0.h
vector<TemShow*> m_vptemshow1;//vector的变量
TemShow *ptemshow1;//六个对话框变量指针
TemShow *ptemshow2;
TemShow *ptemshow3;
TemShow *ptemshow4;
TemShow *ptemshow5;
TemShow *ptemshow6;
然后创建一个线程,
DWORD WINAPI Cpage0::Page0Show(LPVOID lpParameter)////page0显示线程
{
Cpage0 *pPage0 = (Cpage0*)(lpParameter);
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if(g_bIsQuit)
{
break;
}
CString sWenDu1 = ("TS1(度)");CString sWenDu2 = ("TS2(度)");CString sWenDu3 = ("TS3(度)");
CString sNiuJiu = ("扭矩(Nm)");CString sWenDu4 = ("TM1(度)");CString sSpeed = ("转速(R/Min)");
pPage0->m_vptemshow1[0]->ShowData(sWenDu1);
pPage0->m_vptemshow1[1]->ShowData(sWenDu2);
pPage0->m_vptemshow1[2]->ShowData(sWenDu3);
pPage0->m_vptemshow1[3]->ShowData(sSpeed);
pPage0->m_vptemshow1[4]->ShowData(sWenDu4);
pPage0->m_vptemshow1[5]->ShowData(sNiuJiu);
TRACE("page0show successful\n");
Sleep(100);
ReleaseMutex(hMutex);
}
return 0;
}
1)DEBUG下说vector subscript out of range。可是我int len1 = m_vptemshow1.size();TRACE("len1 = %d",len1);得到len1为6啊,没越界啊!怎么还就内存溢出了呢?
2)我有多个线程,程序退出时,
线程 'Win32 线程' (0x2370) 已退出,返回值为 0 (0x0)。
线程 'Win32 线程' (0x1610) 已退出,返回值为 0 (0x0)。
线程 'Win32 线程' (0x218c) 已退出,返回值为 1 (0x1)。
返回非0是不是就有问题啊,怎么找到是哪个线程出了问题呢?
解决方案 »
- vc++6.0 复合文档的读写
- vc工具条的编辑流程
- 急,在线等
- 编译结果提示的错误莫名奇妙,请高手指点?是关于画图的VC程序
- 如何在线修复MSDN
- 请问在这里为什么char szTempPara的每个字符的值为 0 '',而TCHAR szTemp的每个字符为 0 .少俩个'',''在这里是什么意思。
- 线程结束后,有何消息呢???/
- 在vc中,请问为什么他说“far”是非法语句?
- 有关MFC函数的问题,急用,恳请高手指教,万分感谢!!
- 机子有2个屏幕,其中一个是扩展屏,vc怎样控制鼠标只在第一个屏幕上跑而不跑到扩展屏?
- 孙鑫VC++里面的问题 GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,TRUE);
- 求救:VC设置断点调试运行就出错,但编译连接运行都没问题,是不是设置有问题啊?
声明Vector变量后,应该有赋值操作,形式如下:
vector<TemShow*> m_vptemshow1;
m_vptemshow1.push_back(0);
m_vptemshow1.push_back(1);
..........
否则m_vptemshow1仍是一个空向量。第二个问题:
线程的return值一般用处不大,如果你想知道线程为什么退出从哪里退出的话,可以用
BOOL GetExitCodeThread(
HANDLE hThread, // handle to the thread
LPDWORD lpExitCode // address to receive termination status
);
获得线程的退出值。
返回非0并不意味着有问题,需要具体分析。
void Cpage0::CreateDialg(TemShow *&dg,int x,int y,int cx,int cy)
{
dg = new TemShow();//调用构造函数
dg->Create(IDD_TemShow,this);
dg->SetWindowPos(NULL,x,y,cx,cy,SWP_SHOWWINDOW|SWP_NOREDRAW);
m_vptemshow1.push_back(dg);//(元素添加到矢量末尾)创建6个对话框}用来创建这六个对话框了。
第二个回答,你说的这个函数BOOL GetExitCodeThread用在代码哪儿呢?
谢谢了。