Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C++ Builder->Определение времени, необходимого для завершения процесса

Ответить
Настройки темы
C++ Builder->Определение времени, необходимого для завершения процесса

Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Сорри за тупое название темы, в двух словах траблу не описать.
Есть форма, на которой происходит какой нить длительный процесс(в данном случае подгрузка а нимации и БД), необходимо отобразить TPRogressBar и показываьт на нем ход выполнения работы.. Собственно, как?!
Как я понимаю надо юзать нити(потоки, Thread'ы), токо вот как конкретно?..
желательно с примерами...
P.S. В Гугл и Поиск не посылать.....

Отправлено: 10:13, 13-12-2004

 

Аватара для Netscaper

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вовсе не обязательно. При выполнении какого-нибудь цикла можно сделать так:
Код: Выделить весь код
 void __fastcall TForm1::Button1Click(TObject *Sender)
 {
         for(int i=0;i<100000;i++)
         {
                 ProgressBar1->Position = i;
                 Application->ProcessMessages();
         }
 }
Т.е. давать возможность приложению обработать очередь сообщений.
Если TThread, то достаточно создать наследный класс, скажем, TMyThread, в котором перекрыт абстрактный метод Execute, а также введен новый ShowMeth, который меняет значение ProgressBar.
Где-нибудь в Execute необходимо вызвать метод Synchronize:
Код: Выделить весь код
         Synchronize(ShowMeth);
Который обеспечит критическое выполение метода ShowMeth (критическая секция).

Последний раз редактировалось Netscaper, 13-12-2004 в 20:25.


Отправлено: 16:18, 13-12-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Грейт сенькс....

Отправлено: 17:35, 14-12-2004 | #3


Аватара для Netscaper

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Море грейт плежерс

Отправлено: 17:52, 14-12-2004 | #4


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Есть очень длительный процесс(загрузка анимации и БД, к примеру). Нужно в TProgressBar показать прогресс выполнения этого процесса? Из этого следует вопрос - как можно орпеделить время необходимое на завершение процесса?

Отправлено: 12:21, 27-12-2004 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Допустим, известна некоторая мера, показывающая сколько нужно сделать, например, кол-во файлов, байт, строк матрицы и т.д., алгоритм устроен циклом for(i=0; i<imax; i++), то можно сделать вставку типа
Код: Выделить весь код
// thread2:
class MyThread : SomeThreadClass {
     ...
public:
     static int op_to_do;
     static int op_done;
};

MyThread::execute(...)
{
     ...
     for(op_done=0; op_done<op_to_do; op_done++) {
            ...    
    }
}


// thread1:
void SomeGuiClass::onTimer()
{
       progressBar->setValue(op_done);
}
Допустим неизвестно даже примерно, сколько чего нужно сделать. Тогда действует обманка. Нужно показывать состояние по ассимптотически ограниченному закону, например:
Код: Выделить весь код
void SomeGuiClass::onTimer()
{
       // да простят меня пользователи
       progressBar->setValue(100 - 1./(1 + time_elapsed));
}

Отправлено: 14:32, 18-01-2005 | #6

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Если известно сколько нужно сделать и сколько прошло времени, всё решается в пропорциях:

timeLeft = double(timeElapsed)*(work_to_do - work_done)/work_done

Отправлено: 14:40, 18-01-2005 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C++ Builder->Определение времени, необходимого для завершения процесса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Определение атрибута файла & проверка наличия процесса user_123 Скриптовые языки администрирования Windows 10 19-11-2010 16:15
Службы - [решено] Батник для Завершения сеанса YDen Скриптовые языки администрирования Windows 5 28-09-2009 16:17
Интерфейс - [решено] Абракадабры на окошках завершения работы и завершения сеанса nvideo Microsoft Windows 2000/XP 2 26-02-2008 14:17
Выбор простого и необходимого файрвола kazarkin Сетевые технологии 9 22-12-2006 21:44
Прерывание процесса завершения работы ПК Greyman Хочу все знать 5 17-03-2004 06:14




 
Переход