Как приостановить чтение текстового файла при нажатии кнопки и возобновить его при нажатии кнопки OnClick в mfc vc ++? - PullRequest
0 голосов
/ 14 марта 2012

Как приостановить чтение текстового файла при нажатии кнопки и возобновить его при нажатии кнопки в mfc vc ++?

Файл открывается как показано ниже CFileException fileException;

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

}

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Перемещение «чтения» в отдельную ветку, безусловно, лучший способ. Однако вы можете добавить следующую функцию, чтобы другие события происходили во время чтения:

void DoEvents()
{
  MSG msg;
  while( ::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
  {
    ::TranslateMessage( &msg );
    ::DispatchMessage ( &msg );
  }
}

Предполагая, что в вашем коде есть изменчивый флаг для обозначения приостановки / возобновления, вы можете сделать что-то вроде:

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

  // continue reading...
} 

Это должно сработать, но вы можете заметить, что приложение не отвечает на запросы во время цикла. Надеюсь, это поможет.

0 голосов
/ 14 марта 2012

Попробуйте переместить этот код в другой поток, я думаю с любым решением, с которым вам придется бороться с reentrancy , если этот код находится в основном потоке, но вы должны посмотретьсообщения из очереди сообщений.Используя поток, вы можете приостановить его или использовать синхронизирующий примитив для управления его ожиданием.

...