Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Dialog


Автор: avk 31.8.2004, 23:06
Есть диалоговое приложение работающее с базой.
На чтение базы, сортировку и т.д. уходит некоторое время(3-5 сек.), т.е. программа как бы на время зависает.
Хотелось бы сделать что бы в момент чтения базы на экране появилось окно с надписью Подождите и т.д.
Вопрос: как это лучше реализовать.
Заранее спасибо.

Автор: Manve 31.8.2004, 23:23
Добавь поток, в котором проводишь чтение, сортировку и т.д. и дожидайся пока он не вернет результат работы или не завершиться.

Автор: JackYF 31.8.2004, 23:46
В принципе, можно обойтись без потока просто на максимальное время (5с, допустим выведи модально формочку с надписью, поставь таймер, сработает - закрой и работай дальше)

Автор: Manve 31.8.2004, 23:48
Цитата
В принципе, можно обойтись без потока просто на максимальное время (5с, допустим выведи модально формочку с надписью, поставь таймер, сработает - закрой и работай дальше)

Не красиво smile.gif

Автор: AndyY 1.9.2004, 07:12
avk
скорее правильней операции с базой вынести в отдельный поток, а с диалогом давать возможность работы сразу. imho пока юзер осознает, что от него хотят, как раз все и заполнится.
btw это действительно чистое время выполнения запроса? Такое время легко может теряться на заполнении ListCtrl большим числом записей, и бороться с этим нужно уже совсем другими методами.

Автор: Гость_avk 1.9.2004, 10:18
А можно окно ожидания вывести в отдельный поток?
Делаю так
Код

void CadonetDlg::ShowAll()
{
   HANDLE hThread=AfxBeginThread(ThreadFunc,(LPVOID)pWait,THREAD_PRIORITY_HIGHEST);
   FillList();
}

UINT ThreadFunc(LPVOID pParam)
{
   MWait *pW=(MWait*)pParam;
   pW->Create(MWait::IDD,NULL);
   pW->ShowWindow(SW_SHOW);
   return 0;
}

В результате окно выводится после чтения базы... qstn.gif

Автор: avk 1.9.2004, 10:20
Это был я. Забыл зарегистрится...

Автор: AndyY 1.9.2004, 12:12
avk
можно.
А чтобы показалось пораньше, можно вызвать pW->UpdateWindow();

но смысл потока мне не ясен - все то-же, что и в основном.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)