2 zdm520a zdm520a 于 2016.01.13 22:45 提问

mfc线程挂起唤醒操作问题

HANDLE hThread;
CWnd *pWnd;

UINT TextShow(LPVOID pParam)
{
CString szLine;
//打开文件
CStdioFile file;
file.Open(_T("E:\1.txt"), CFile::modeRead);
//逐行读取字符串
while (file.ReadString(szLine))
{
pWnd->SetWindowText(szLine);
hThread = GetCurrentThread();
SuspendThread(GetCurrentThread());
}

//关闭文件
file.Close();
return 0;

}

void CMFCApplication2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
pWnd = GetDlgItem(TEXTT);
AfxBeginThread(TextShow,NULL);

}

void CMFCApplication2Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
ResumeThread(hThread);
}

我想做一个文本逐行读取的小程序,每次输出一行后暂停,用户点击按钮后继续输出下一行后暂停,这样循环下去,但是现在可以暂停点击唤醒线程的按钮去没反应不能继续执行,请问怎么解决呢

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.13 23:34

实践中,不要用ResumeThread、SuspendThread,这样做容易导致死锁、内存泄漏等问题。你应该让你的线程去wait一个信号量来让它暂停。你从概念上都错了。

91program
91program   Ds   Rxr 2016.01.14 08:28

在 MSDN 的帮助中有这样一段话:This function is primarily designed for use by debuggers. It is not intended to be used for thread synchronization.
即不推荐使用 SuspendThread 做线程之间的同步,可以考虑使用信号量。

当然,你也可以使用。如果功能无效,请判断一下 SuspendThread 和 ResumeThread 的判断,再加上 GetLastError 的返回值来判断无效的原因。

CSDNXIAOD
CSDNXIAOD   2016.01.13 22:47

线程的挂起和唤醒
求助,关于MFC线程数据共享的问题
MFC线程的挂起、唤醒和终止
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!