hur.cn - 华软网

 热门搜索

多线程问题,怎么不行?

  作者:未知    来源:网络    更新时间:2010/12/9
//收集线程
UINT ThreadCollect(LPVOID lpParam)
{
ThreadInfo* threadInfo=(ThreadInfo*)lpParam;

CMultiThreadDemoDlg* dlg=threadInfo->dlg;

while(true)
{
Sleep(6000);
dlg->m_log.Log("Collect Testing!");
}
}
//发送线程
UINT ThreadSend(LPVOID lpParam)
{
ThreadInfo* threadInfo=(ThreadInfo*)lpParam;

CMultiThreadDemoDlg* dlg=threadInfo->dlg;

while(true)
{
Sleep(7000);
dlg->m_log.Log("Send Testing!");
}
}
//心跳线程
UINT ThreadHeartBeat(LPVOID lpParam)
{
ThreadInfo* threadInfo=(ThreadInfo*)lpParam;

CMultiThreadDemoDlg* dlg=threadInfo->dlg;


while(true)
{
Sleep(8000);
dlg->m_log.Log("HeartBeat Testing!");
}
}

定义以下:
struct ThreadInfo
{
CMultiThreadDemoDlg* dlg;
};

UINT ThreadCollect(LPVOID lpParam); 
UINT ThreadSend(LPVOID lpParam); 
UINT ThreadHeartBeat(LPVOID lpParam); 

调用在Dialog的OnInitDialog中调用,调用语句以下:
CMultiThreadDemoDlg dlg;
ThreadInfo threadInfo;
threadInfo.dlg=&dlg;

CWinThread* pThreadCollect; 
CWinThread* pThreadSend; 
CWinThread* pThreadHeartBeat; 

pThreadCollect=AfxBeginThread(ThreadCollect,&threadInfo);
pThreadSend=AfxBeginThread(ThreadSend,&threadInfo);
pThreadHeartBeat=AfxBeginThread(ThreadHeartBeat,&threadInfo);

m_log是Dialog中的一个类变量,m_log.Log("")是m_log中的一个方法
注:m_log已经经过屡次尝试没问题

程序运行后产生以下毛病:

“0x7c93b21a”指令引用的"0x00000010"内存。该内存不能为"written"
要终止程序,请单击“确定”
要调试程序,请单击“取消”

【确定】 【取消

---华软 网友回答---
看是否是那里指针成野指针了
---华软网友回复---
直接在线程函数的参数里传指针,而不是局部变量
---华软网友回复---
你传送给线程函数的参数是局部变量      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。