AfxBeginThread线程调用函数,函数调用方法出错。

kkandkkg 2011-09-05 11:34:59
AfxBeginThread(AFX_THREADPROC(ThreadSendMail),(LPVOID)this);//启动线程

//线程函数
UINT ThreadSendMail(LPVOID param){
CMulPackView *pCMulPackView=(CMulPackView*)param;
if(!pCMulPackView->m_mailStruct->isStream)
pCMulPackView->sendEmail(pCMulPackView->m_mailStruct->title,NULL,pCMulPackView->m_mailStruct->content,pCMulPackView->m_mailStruct->FileName);
else
pCMulPackView->sendEmail(pCMulPackView->m_mailStruct->title,pCMulPackView->m_mailStruct->FileName,pCMulPackView->m_mailStruct->content,pCMulPackView->m_mailStruct->FileName);
return 0;
}

void CMulPackView::sendEmail(char* strSubject,char* strAppOctStrmContent,char* strHtmlContent,char* fileName)
{
KSmtp smtp;
deque<string> strMails;
char* strSendto="xxx@xx.com";
strMails.push_back(strSendto); //出错

//连接服务器
if(!smtp.Connect(strSmtpAddr,25)){ //出错
AfxMessageBox("连接服务器失败!"); return ;
}
}

在线程调用函数中调用CMulPackView类中的sendEmail,其中在deque<string> strMails中进行push_back和调用smtp的Connect方法出错,是什么问题呢?怎样解决?
...全文
80 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2011-09-06
  • 打赏
  • 举报
回复
重新封装一下数据结构吧,要是我的话,一般将定义一个结构体,将相关的数据作为结构体的成员,然后将结构体传递给线程函数。
kkandkkg 2011-09-06
  • 打赏
  • 举报
回复
线程中在strMails中添加数据或调在类中的方法,都出现错误,例如CString xx="XX";这样也出现错误,在线程中分配空间是不允许的吗?怎样解决这样的问题?
蒋晟 2011-09-06
  • 打赏
  • 举报
回复
很正常,stl、MFC都不是线程安全的
同步访问数据的时候要加锁,线程之间通讯用消息和事件

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧