小弟今天敲了一个检测邮箱中新邮件的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
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
解决方案 »
- 求助帖 简单的可视化编程!
- 加载了一个位图,因为需要灰度化后进行测量运算,如何能在前台显示时可以同时绘制RGB的其它图行,如矩形,并且保证矩形的颜色!
- vc2008 sp1 MDI 如何添加背景图片
- 如何获得一个进程的cpu使用率??
- 求助windows2000下(硬件)驱动程序或DLL的制作?也可以不要分,货币交易
- 关于CListCtrl中的内容显示顺序和以数值进行显示的问题!
- 请贴一下在VC++中用代码直接创建一个Access *.mdb文件的代码(不需建立数据源)
- 小问题:如何在运行中设置编辑框中的内容
- idl文件中是否能加入参数定义?
- 怎么修改鼠标指针,如移到屏幕,对话框,控件就改变????
- 属性页对话框的问题
- MFC中位图分块显示,图片一闪而过
线程是否成功创建?