Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Реализация функции Sleep в потоке


Автор: x_byte 6.2.2005, 09:37
Мне необходимо перед открытием страницы в CppWebBrowser1 выдержать паузу заданную мной же. Всё бы хорошо, можно использовать Sleep:
Код

Sleep(2000);
CppWebBrowser1->Navigate(адрес);

...но тогда приложение зависает полностью! пока время слипа не истечёт! Я хотел вынести sleep в отдельный поток...что бы программа не висла и была пауза перед переходом по ссылке,..... ничего не вышло, в отдельном потоке программа всё равно залипала. smile Поток создавал через Thread Object.
Нужен выход.... Либо Функция взамен слипу, которая не ступит приложение, либо другая вариация потока.... которая даст нужный эффект.

Автор: Дрон 6.2.2005, 11:06
А что же должно делать приложении в течении этих двух секунд?

Добавлено @ 11:08
Цитата(x_byte @ 6.2.2005, 09:37)
ничего не вышло, в отдельном потоке программа всё равно залипала

А это как? Опять же что значит "залипала"?

Автор: x_byte 6.2.2005, 12:45
Цитата
А что же должно делать приложении в течении этих двух секунд?

Вообще...да... я сейчас подумал... наверное я хочу невозможного...
Можно сделать, но это будет занимать процессор и тогда будет виснуть всё, если я не ошибаюсь.. (т.е. перед тем как перейти на страницу включить таймер (в отдельном потоке), который через указанный интервал сам себя отключит, и ниже ждать пока он не отключится:
Код

while(Timer1->Enabled == true)
{
   g = 1;
}

Корче тоже не выход!!! Ладно, буду sleep'ом пользоваться!
Цитата
А это как? Опять же что значит "залипала"?

А это я не правельно выразился с просони.... я имел ввиду не программа в отдельном потоке... smile smile smile , а sleep в отдельном потоке всё равно останавливал программу полностью.
"Залипала", это то что происходит когда работает sleep... это такая моя вольная формулировка, первое что в голову пришло. smile

Автор: InfMag 6.2.2005, 21:24
sleep() - это WinApi'шная функция, поэтому ниче хорошего от нее ожидать не следует.
А с таймером у тебя висло потому, что ты поставил while, а это как известно цикл, который будет все это время вести 100% нагрузки на ЦП.
Если действительно хочешь реализовать такую фишку, то делай как я smile :
1. Создай какую-нить кнопочку
2. Создай таймер
3. У таймера Enabled ставь FALSE
4. Пиши нужный интервал у таймера
5. В коде таймера пиши:
Код

CppWebBrowser1->Navigate(/*адрес*/);
Timer1->Enabled=FALSE;

6. В коде кнопки пиши:
Код

Timer1->Enabled=TRUE;


И жми на кнопку... Мой, не знаю насколько нетупой способ, но работает идеально. smile

Автор: x_byte 7.2.2005, 02:58
InfMag, спасибо я так и сделал!!!!! Работает!!! smile smile smile

Автор: Nicky 16.2.2005, 20:47
Кстати, используя компонент таймер можно создать свою функцию заменяющую Sleep()!

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