程序运行正常,可是一段时间后出现“内存不能为“read””的问题,本人对线程不熟,恳请高手指点,部分代码如下:typedef struct group
{
int m_omp;
CString str;
}Group;long WINAPI  MyThreadProc1( long pParam )
{ ..... return 1;
}long WINAPI  MyThreadProc( long pParam )
{ int thread=int(pParam)+1;
group m_str;

m_str.str=LoadCode();
printf("%d-%s\n",thread,m_str.str);
unsigned long * p1=NULL;
HANDLE hthread1[20];
int m_omp;
for(m_omp=0;m_omp<k_count;m_omp++)
{
m_str.m_omp=m_omp+1; hthread1[m_omp]=::CreateThread(NULL,m_omp,(LPTHREAD_START_ROUTINE)MyThreadProc1,(LPVOID) &m_str,0,p1);
Sleep(1000);
} DWORD dw1;
dw1=WaitForMultipleObjects(k_count,hthread1,true,1000);
if(dw1==WAIT_TIMEOUT)
{
for(int i=0;i<k_count;i++)
{

TerminateThread(hthread1[i],0);
}

} Sleep(2000); return 1;
}int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

... while(1)
{ unsigned long * p=NULL;
HANDLE hthread[20];
int ik;
for(ik=0;ik<10;ik++)
{
hthread[ik]=::CreateThread(NULL,ik,(LPTHREAD_START_ROUTINE)MyThreadProc,LPVOID(ik),0,p);

Sleep(1000);
} DWORD dw;
dw=WaitForMultipleObjects(10,hthread,true,7*1000);
if(dw==WAIT_TIMEOUT)
{
for(int i=0;i<10;i++)
{
TerminateThread(hthread[i],0);
}
}

Sleep(2000); }
return nRetCode;
}

解决方案 »

  1.   

    有没什么具体的解决办法?不是第一次碰到这种问题了。
    调试结果是0xC0000005: Access Violation
    指向出错指令:7C921010   cmp         dword ptr [edx+14h],0
      

  2.   

    把Sleep()的值加大就没那么容易死,是不是跟这个有关。程序要数据库和数据文件支持,还要读取配置文件,很难完整给出。
      

  3.   

    光凭向行代码找不出问题。最好还贴出些代码。请问k_count如何定义。问题可能出在k_count和m_str
      

  4.   

    调试结果是0xC0000005: Access Violation
    指向出错指令:7C921010   cmp         dword ptr [edx+14h],0感觉是变量的作用域出错了。在线程间的指针、(对这两者而言的)全局变量,地址访问问题。这种事,我的线程里出现好几次。好像局部的static变量能解决一点问题。但没仔细跟踪,也不知从何跟踪。只是用了之后就不出问题了。
      

  5.   

    CreateThread(NULL,m_omp,(LPTHREAD_START_ROUTINE)MyThreadProc1,(LPVOID) &m_str,0,p1);
    m_str为局部变量,MyThreadPorc结束后不可用,可以用:
    group *m_str = new group;
    CreateThread(NULL,m_omp,(LPTHREAD_START_ROUTINE)MyThreadProc1,(LPVOID) m_str,0,p1);
    然后在MyThreadProc1中释放m_str.
      

  6.   

    k_count等于6,由配置文件读入。我把_tmain函数中的Sleep(1000); 改为Sleep(3000);,程序运行3个钟暂无出现错误。经常遇到这个问题,希望能得到更加详尽的解答,所以迟些结贴给分,不好意思。