小弟今天敲了一个检测邮箱中新邮件的MFC对话框程序,程序启动了一个后台线程:
MailThread = ::AfxBeginThread(GetMailThread, this);
调用的this参数是对话框类的指针,GetMailThread函数主要用来连接POP服务器,并且根据从服务器得到的数据更新this指针指向的对话框中的控件内容,但是调试GetMailThread函数的时候,线程没有执行,请问各位大侠,是什么原因。函数代码如下:
UINT GetMailThread(LPVOID lpParam)
{
CCheckMailDlg* dlg = (CCheckMailDlg*) lpParam; bool cyc = true;
char data[1024];
int ret = 0;
CSocket accmail;
accmail.Create();
ret = accmail.Connect(dlg->m_pop3, 110);
if (!ret)
{
cyc = false;
}
ret = accmail.Receive(data, 1024);
if (strncmp(data, "+OK", 3) != 0)
{
cyc = false;
}
sprintf(data, "USER %s\r\n", dlg->m_user);
ret = accmail.Send(data, strlen(data));
if (ret < 0) 
{
cyc = false;
}
ret = accmail.Receive(data, 1024);
if (strncmp(data, "+OK", 3) != 0)
{
cyc = false;
} sprintf(data, "PASS %s\r\n", dlg->m_pass);
ret = accmail.Send(data, strlen(data));
if (ret < 0)
{
cyc = false;
}
ret = accmail.Receive(data, 1024);
if (strncmp(data, "+OK", 3) != 0)
{
cyc = false;
} while (cyc && dlg->run)
{
sprintf(data, "STAT\r\n");
ret = accmail.Send(data, strlen(data));
if (ret < 0)
{
cyc = false;
}
ret = accmail.Receive(data, 1024);
if (ret < 0)
{
cyc = false;
}
if (strncmp(data, "+OK", 3) != 0)
{
cyc = false;
}
dlg->UpdateState(data); // 更新对话框中控件文本
} sprintf(data, "QUIT\r\n");
ret = accmail.Send(data, strlen(data));
if (ret < 0)
{
cyc = false;
}
ret = accmail.Receive(data, 1024);
if (strncmp(data, "+OK", 3) != 0)
{
cyc = false;
}
accmail.Close();
return 0;}mfc

解决方案 »

  1.   

    在::AfxBeginThread处打断点确定代码走到这里了,然后再在线程开始处打一个断点.
      

  2.   

    ::AfxBeginThread这个函数执行了,断点走到着了,然后再线程函数GetMailThread的断点处就一直没有动静
      

  3.   

    GetMailThread里面的断点是下在哪个地方的,是不是Connect阻塞了
      

  4.   

    应该不是AfxBeginThread没执行,而是线程函数中的某个地方有问题吧。
      

  5.   

    调用GetMailThread的断点是放在函数的最开始,所以是线程函数没有执行。
      

  6.   

    用CreateThread,没用过afxbeginthread,不知道里面会传什么标志给CreateThread,如果是CREATE_SUSPEND就头疼.
      

  7.   

    ::AfxBeginThread返回值是什么?
    线程是否成功创建?
      

  8.   

    是线程MailThread没有初始化,所以线程未创建谢谢大家了