C++ 在mfc vc+中,如何在单击按钮时暂停读取文本文件,并在单击按钮时恢复读取+;?

C++ 在mfc vc+中,如何在单击按钮时暂停读取文本文件,并在单击按钮时恢复读取+;?,c++,visual-c++,mfc,mfc-feature-pack,C++,Visual C++,Mfc,Mfc Feature Pack,在mfc vc++中,如何在单击按钮时暂停读取文本文件,并在单击按钮时恢复读取 文件如下所示打开 CFileException文件异常 if (readFile.Open(strFilePath, CFile::modeRead, &fileException) { while (readFile.ReadString(strLine)) { ... } } 试着把代码转移到另一个线程,我认为如果这个代码在主线程中,那么你就必须使用任何解决方案,但是你必须从消息队列中窥视消息

在mfc vc++中,如何在单击按钮时暂停读取文本文件,并在单击按钮时恢复读取

文件如下所示打开 CFileException文件异常

    if (readFile.Open(strFilePath, CFile::modeRead, &fileException)
{
while (readFile.ReadString(strLine))
{
...
}

}

试着把代码转移到另一个线程,我认为如果这个代码在主线程中,那么你就必须使用任何解决方案,但是你必须从消息队列中窥视消息。你可以使用一个线程来读取它,也可以使用一些线程来管理它的等待。

将“读取”移动到一个单独的线程肯定是最好的方法。但是,您可以添加以下函数,以允许在读取时发生其他事件:

void DoEvents()
{
  MSG msg;
  while( ::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
  {
    ::TranslateMessage( &msg );
    ::DispatchMessage ( &msg );
  }
}
假设您的代码中有一个volatile标志来指示暂停/恢复,您可以执行以下操作:

while (readFile.ReadString(strLine)) 
{ 
  while( this->m_bPause == TRUE )
  {
    ::Sleep( 100 ); // Adjust as necessary
    DoEvents();
  }

  // continue reading...
} 

这应该是可行的,但你可能会注意到应用程序在循环过程中有点反应迟钝。希望这有帮助。

这是在不同的线程中运行的吗?我用MFC使用Visual C++,所以我使用了下面的标签