void CGZHHjmDlg::OnBnClickedDaoruButton()
{
// TODO: 在此添加控件通知处理程序代码
int row = 0;
char szFilter[] = "Text files(*.txt)|*.txt||";
CFileDialog dlg(TRUE, "txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
if (dlg.DoModal() == IDOK) {
CStdioFile file(dlg.GetPathName(), CFile::modeRead);
while (file.ReadString(CPublic::strLine))
{
CPublic::button_down = 0;
if ((m_dropdown.GetCurSel() == 0) && CPublic::button_down == 0)
{
char* str = (char*)CPublic::strLine.GetBufferSetLength(CPublic::strLine.GetLength());
if (CPublic::strLine != "")
{
CPublic::result += CPublic::strLine+_T("\r\n");
SetTimer(TIMER_IMPORT, 1000, NULL);//1s
m_fifo.LineScroll(m_fifo.GetLineCount(), 0);//滚动到底部开始显示
row++;
}
}
}
file.Close();
}
}
void CGZHHjmDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nIDEvent)
{
case TIMER_SHOW:
{
CString str;
CTime Itime = CTime::GetCurrentTime();
str = Itime.Format("%Y-%m-%d %H:%M:%S");
CWnd* p;
p = GetDlgItem(IDC_TIME_EDIT);
p->SetWindowText(str);
break;
}
case TIMER_IMPORT:
{
GetDlgItem(IDC_FIFO_EDIT)->SetWindowText(CPublic::result);
GetDlgItem(IDC_FIFO_EDIT)->UpdateWindow();
break;
}
default:
break;
}
}
以上代码最后效果就是在编辑框中全部显示数据,达不到想要的每秒显示一行数据到编辑框(类似于是每秒更新的效果,Sleep能达到效果,但是必须全部读取完文件之后才能进行其他操作,所以放弃了这种用法),我打过断点看过,读取txt文件结束之后才进入OnTimer。
另外我还尝试过在 while里面只单独设SetTimer,在Ontimer里面去一行行读取,但是这种情况下编辑框根本就不显示任何数据。
请教下大佬们,,该怎么解决一下呀。
最好启动一个线程,或者用定时器读不能用while循环,通过变量控制。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y