AfxBeginThread创建线程后,不能执行线程入口函数。有时候执行到线程入口函数一半的时候就返回。 5

其中str1是CString类型的。g_bFlag全局的。////////////////////////////////////////////////////////... 其中str1是CString类型的。
g_bFlag 全局的。
////////////////////////////////////////////////////////////////////////////////////////////()第一段代码
LPSTR lpstr=str1.GetBuffer(2);
LPVOID lpvoid=(LPVOID)lpstr;
str1.ReleaseBuffer();
CWinThread* th;
th = AfxBeginThread((AFX_THREADPROCConnectFtp,lpvoid,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
//WaitForSingleObject(th->m_hThread,INFINITE);
Sleep(3000);
//////////////////////////////////////////////////////////////////////////////////////////第二段代码
if (g_bFlag ==false) //Ftp连接失败
{
m_strList.AddString(str1+"号站连接失败!请检查你的连接情况!");
}
else //Ftp连接成功
{
m_strFtpInfo = FtpClient.GetFtpInfo(); //获取服务器返回的连接信息
AddBlackInfo(m_strFtpInfo); //把服务器返回的信息分解后加载在ListBox中
m_strList.AddString(str1+"号站连接成功,正在上传IP配置文件……");
}

//////////////////////////////////////////////////////////////////////////////////第三段代码
ConnectFtp是静态的线程函数
UINT CIPConfigDlg::ConnectFtp(LPVOID pFtp)
{
bool bFlage = NULL;
CFtpClient FtpClient;
CString str=(LPCTSTR)pFtp;

if (FtpClient.FtpClientConnect("128.0.0."+str,"root","root"))
{

g_bFlag = true;
return 1;
}
else
{

g_bFlag = false;
return 0;
}
}

问题是,我的线程入口函数不能执行。理想的执行顺序是第一段代码、第三段代码、第二段代码。
而现在程序执行的顺序是第一段代码、第二段代码、第三段代码。
展开
 我来答
flydream3618
2011-09-08 · TA获得超过173个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:164万
展开全部
虽然你创建了线程,但你的线程应该并没有运行呀~~~也就是说你的线程是处于挂起状态的。
更多追问追答
追问
怎么才可以让他运行。谢谢
追答
ResumeThread()函数试试~~
手机用户32645
2011-09-08 · TA获得超过421个赞
知道小有建树答主
回答量:459
采纳率:100%
帮助的人:295万
展开全部
查询MFC,SuspendThread()

CSDN上谈到
“直接SuspendThread函数不能保证在何处挂起,可能有线程未退出临界区导致死锁,不太安全。
创建一个Event,需要挂起线程时,WaitForSingleObject等待,继续的时候,SetEvent ”
这个方法更安全。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式