我定义了一个结构体
typedef struct ThreadDate
{
CString strIP;
CString strType;
CString strName;
}ThreadDate;
然后在一个类page2的一个方法中定义了该结构体的一个变量ThreadDate StorePingVaule[1000];void CPage2Dlg::Ontese()
{ TimeBegin();
ThreadDate StorePingVaule[1000];
CComboBox* combobox=(CComboBox*)GetDlgItem(IDC_COMBO1);
CString strType;
combobox->GetLBText(combobox->GetCurSel(),strType);
if (strType=="全部设备")
{
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
int nStep,nNum,nProgressPos,nMax,nMin;
nNumArray=0;
nNum=m_grid.GetItemCount();
nStep = 100/nNum;
nProgressPos=0;
m_progress.GetRange(nMin,nMax); m_grid.DeleteAllItems();
CString sql;
sql.Format("select* from user order by addr desc");
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);
int num=0;
//初始化
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
{
StorePingVaule[num].strIP.Format("%s",(char*)(_bstr_t)m_pRecordset->GetCollect("addr"));
StorePingVaule[num].strName=(char*)(_bstr_t)m_pRecordset->GetCollect("name");
StorePingVaule[num].strType=(char*)(_bstr_t)m_pRecordset->GetCollect("type");
num++;
}
m_pRecordset->MoveNext();
}//while is over
nNumArray=num;
m_AdoConn.ExitConnect(); {
int PingNum=0;
int nTempNUm=0;
int n1=0;
{
/// AfxMessageBox((LPTSTR)(LPCTSTR)StorePingVaule[nTempNUm]); //test
ThreadGrid MyPingThread;
StorePingVaule0[1000]=StorePingVaule[1000];
MyPingThread.StorePingVauleInThread=&StorePingVaule0[0];
MyPingThread.nNumArray=nNumArray;
MyPingThread.pList=&m_grid;
MyPingThread.pProgress=&m_progress;
MyPingThread.nStepProgress=nStep;
CWinThread* pThread=AfxBeginThread(ThreadFuncPing,&MyPingThread);
}
}
}
else { int nStep,nNum,nProgressPos,nMax,nMin;
int nIsQuit=0;
nNumArray=0;
m_progress.GetRange(nMin,nMax);
nNum=m_grid.GetItemCount();
nStep = 100/nNum; ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
CString sql;
sql.Format("select * from user where type ='" +strType+ "' order by addr desc"); _RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql); int num=0;
//初始化
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
{
StorePingVaule[num].strIP.Format("%s",(char*)(_bstr_t)m_pRecordset->GetCollect("addr"));
StorePingVaule[num].strName=(char*)(_bstr_t)m_pRecordset->GetCollect("name");
StorePingVaule[num].strType=(char*)(_bstr_t)m_pRecordset->GetCollect("type");
num++;
}
m_pRecordset->MoveNext();
}//while is over nNumArray=num;
m_AdoConn.ExitConnect();
int PingNum=0;
int nTempNUm=0;
int n1=0;
ThreadGrid MyPingThreadNotAll;
MyPingThreadNotAll.StorePingVauleInThread=&StorePingVaule[0];
MyPingThreadNotAll.nNumArray=nNumArray;
MyPingThreadNotAll.pList=&m_grid;
MyPingThreadNotAll.pProgress=&m_progress;
MyPingThreadNotAll.nStepProgress=nStep;
MyPingThreadNotAll.flag=&nIsQuit;
CWinThread* pThread=AfxBeginThread(ThreadFuncPing,&MyPingThreadNotAll); }//else is over GetDlgItem(IDC_COMBO1)->EnableWindow();
//
}其中在MyPingThreadNotAll.StorePingVauleInThread=&StorePingVaule[0];一句已经得不到&StorePingVaule[0];线程函数是一个全局的。问题的结果是在Relese下运行没错误,在Debug下运行记录变为不认识的汉字,该如何解决这个问题。本人菜鸟,不知道把问题描述清楚了没有,求高手帮忙!!
typedef struct ThreadDate
{
CString strIP;
CString strType;
CString strName;
}ThreadDate;
然后在一个类page2的一个方法中定义了该结构体的一个变量ThreadDate StorePingVaule[1000];void CPage2Dlg::Ontese()
{ TimeBegin();
ThreadDate StorePingVaule[1000];
CComboBox* combobox=(CComboBox*)GetDlgItem(IDC_COMBO1);
CString strType;
combobox->GetLBText(combobox->GetCurSel(),strType);
if (strType=="全部设备")
{
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
int nStep,nNum,nProgressPos,nMax,nMin;
nNumArray=0;
nNum=m_grid.GetItemCount();
nStep = 100/nNum;
nProgressPos=0;
m_progress.GetRange(nMin,nMax); m_grid.DeleteAllItems();
CString sql;
sql.Format("select* from user order by addr desc");
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);
int num=0;
//初始化
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
{
StorePingVaule[num].strIP.Format("%s",(char*)(_bstr_t)m_pRecordset->GetCollect("addr"));
StorePingVaule[num].strName=(char*)(_bstr_t)m_pRecordset->GetCollect("name");
StorePingVaule[num].strType=(char*)(_bstr_t)m_pRecordset->GetCollect("type");
num++;
}
m_pRecordset->MoveNext();
}//while is over
nNumArray=num;
m_AdoConn.ExitConnect(); {
int PingNum=0;
int nTempNUm=0;
int n1=0;
{
/// AfxMessageBox((LPTSTR)(LPCTSTR)StorePingVaule[nTempNUm]); //test
ThreadGrid MyPingThread;
StorePingVaule0[1000]=StorePingVaule[1000];
MyPingThread.StorePingVauleInThread=&StorePingVaule0[0];
MyPingThread.nNumArray=nNumArray;
MyPingThread.pList=&m_grid;
MyPingThread.pProgress=&m_progress;
MyPingThread.nStepProgress=nStep;
CWinThread* pThread=AfxBeginThread(ThreadFuncPing,&MyPingThread);
}
}
}
else { int nStep,nNum,nProgressPos,nMax,nMin;
int nIsQuit=0;
nNumArray=0;
m_progress.GetRange(nMin,nMax);
nNum=m_grid.GetItemCount();
nStep = 100/nNum; ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
CString sql;
sql.Format("select * from user where type ='" +strType+ "' order by addr desc"); _RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql); int num=0;
//初始化
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
{
StorePingVaule[num].strIP.Format("%s",(char*)(_bstr_t)m_pRecordset->GetCollect("addr"));
StorePingVaule[num].strName=(char*)(_bstr_t)m_pRecordset->GetCollect("name");
StorePingVaule[num].strType=(char*)(_bstr_t)m_pRecordset->GetCollect("type");
num++;
}
m_pRecordset->MoveNext();
}//while is over nNumArray=num;
m_AdoConn.ExitConnect();
int PingNum=0;
int nTempNUm=0;
int n1=0;
ThreadGrid MyPingThreadNotAll;
MyPingThreadNotAll.StorePingVauleInThread=&StorePingVaule[0];
MyPingThreadNotAll.nNumArray=nNumArray;
MyPingThreadNotAll.pList=&m_grid;
MyPingThreadNotAll.pProgress=&m_progress;
MyPingThreadNotAll.nStepProgress=nStep;
MyPingThreadNotAll.flag=&nIsQuit;
CWinThread* pThread=AfxBeginThread(ThreadFuncPing,&MyPingThreadNotAll); }//else is over GetDlgItem(IDC_COMBO1)->EnableWindow();
//
}其中在MyPingThreadNotAll.StorePingVauleInThread=&StorePingVaule[0];一句已经得不到&StorePingVaule[0];线程函数是一个全局的。问题的结果是在Relese下运行没错误,在Debug下运行记录变为不认识的汉字,该如何解决这个问题。本人菜鸟,不知道把问题描述清楚了没有,求高手帮忙!!
解决方案 »
- mfc中利用mciWndCreate播放音频的问题
- 韩国风格AI播放器按钮矢量图标
- CStatus 的SetIndicators如何使用
- 如何获取窗口中元素?
- 有没有将整型数值转换成字符串型的函数
- 急:调用其它.cpp变量的问题,高分相送
- 我有一个字符串CString a="d:\devlop\myvc60\runtogther\" 请问我怎样能将字符串里所有的"\" 转化为 "\\" ??????
- 求救:怎样获取多选ListBox中被选的项?
- 关于CEditView的问题.
- my application can't work on windowsXP!How can I do?
- GetWindowThreadProcessId函数来获得进程的id但是编译的时候老是出错?
- 新手散分
是怎么回事?
估计是你使用了栈内存作为线程参数传递给线程了,这样肯定会时程序崩溃的,因为线程运行是你的栈内存可能已经释放掉了,所以访问内存错误。
是同堆内存(new方式)即可
{
char strIP[512];
char strType[512];
char strName[512];
}ThreadDate;while(m_AdoConn.m_pRecordset->adoEOF==0)
{
{
memset(StorePingValue[num].strIP, 0, 512);
..依次类推,初始化另外两个。赋值改成 memcpy 或者 strcpy 例如StorePingVaule[num].strType=(char*)(_bstr_t)m_pRecordset->GetCollect("type");改成strcpy(StorePingVaule[num].strType, (char*)(_bstr_t)m_pRecordset->GetCollect("type"))建议你用 memcpy 防止缓冲区溢出。
num++;
}
ThreadGrid MyPingThreadNotAll;
在线程运行时可能已经释放掉了
ThreadDate StorePingVaule[1000];这个也是
这两个都要定义成全局的或者动态分配
我刚试了试你的办法,不行啊。void *memcpy( void *dest, const void *src, size_t count );第三个参数我设的10。结果点击查询就弹出发送错误报告窗口。是不是还是那个结构体变量的问题? MyPingThread.StorePingVauleInThread=&StorePingVaule[0];变量的值就是乱码了。
那个调试器我不太会用,总是进入汇编程序,怎么回事?