Не удается отобразить индикатор выполнения с использованием концепции потоков? - PullRequest
0 голосов
/ 01 апреля 2010

Я пытаюсь показать индикатор выполнения, пока идет мой процесс ... в моем приложении будет ситуация, когда мне придется читать файлы и манипулировать ими (это займет некоторое время) .. хочу отобразить индикатор выполнения во время этой операции .. конкретная функция, которую я вызываю, - это выигрыш 32 ... поэтому, если вы проверите мой код ниже ... Я могу отобразить индикатор выполнения, но он не показывает никакого прогресса. любой дальнейший процесс ... Пожалуйста, помогите мне .. спасибо заранее

//my  function
int Myfunction(....)
{
 MSG msg;
 HWND dialog = CreateWindowEx(0,WC_DIALOG,L"Proccessing...",WS_OVERLAPPEDWINDOW|WS_VISIBLE,
     600,300,280,120,NULL,NULL,NULL,NULL);
 HWND pBar =  CreateWindowEx(NULL,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE,40,20,200, 20,
       dialog,(HMENU)IDD_PROGRESS,NULL,NULL);
 SendMessage(pBar,PBM_SETRANGE,0,MAKELPARAM(0,noOfFile));


  while(GetMessage(&msg,NULL,0,0))
  {
    TranslateMessage(&msg);
    Dispatch(&message);
  }

 HANDLE getHandle = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)SetFilesForOperation(...),
    NULL,NULL,0);

}


LPARAM SetFilesForOperation(...)       
{

 for(int index = 0;index < noOfFiles; index++)
 {


  *checkstate = *(checkState + index);
  if(*checkstate == -1)
  {
   *(getFiles+i) = new TCHAR[MAX_PATH];
   wcscpy(*(getFiles+i),*(dataFiles +index));
   i++;

  }
  else
  {
   (*tempDataFiles)->Add(*(dataFiles+index));
   *(checkState + localIndex) = *(checkState + index);
   localIndex++;
  }

  PostMessage(pBar,PBM_SETPOS,(WPARAM)index,0);
 }
}

Ответы [ 2 ]

2 голосов
/ 01 апреля 2010

Я подозреваю, что проблема в том, что вы создаете поток после , когда ваше приложение закрывается - если вы переместите вызов CreateThread над насосом сообщений, он может работать лучше.

0 голосов
/ 01 апреля 2010

Я предпочитаю использовать QT, а не MFC. Вот как я бы использовал это, чтобы ответить на ваш вопрос:

Используйте конструктор форм для создания диалога и используйте AfxBeginThread (someFunc, param) для создания потока.

В someFunc используйте SendMessage, чтобы сообщить диалогу о прогрессе.

образец здесь: http://www.tek -tips.com / faqs.cfm? FID = 5162

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...