Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Проблема с паузами |
Автор: BlHol 29.4.2006, 10:23 | ||
День добрый! Есть обработчик:
Так вот. После нажатия на кнопку хочу увидеть, как текст на метке после первой паузы окрашивается сначала в зеленый, а потом после второй паузы в синий. А в результате, окрашивание текста происходит сразу в синий. Т.е. такое впечатление, что первая пауза не срабатывает. Поэтому вопроса 2: 1. Почему так происходит? 2. Как решить проблему? Заранее благодарен. С уважением. |
Автор: BreakPointMAN 29.4.2006, 12:13 | ||
и да поможет тебе
перед вторым циклом (кстати, у него в 10 раз меньше итераций, чем у первого - это так задумано?), а вообще говоря, для таких дел лучше использовать компонент TTimer (вкладка System палитры компонентов C++ Builder) |
Автор: BlHol 29.4.2006, 12:37 |
Я количество итераций и уменьшал и увеличивал. Те же яйца... |
Автор: Hose 2.5.2006, 09:16 | ||||
Возможно умный компилятор просто переделывает строку
|
Автор: BlHol 2.5.2006, 09:45 | ||||||
И как с этим бороться? |
Автор: Hose 2.5.2006, 10:30 | ||||||
открываем VS 2003 создаем консольное приложение текст программы:
Залезаем в свойства проекта и ставим оптимизацию maximum speed запускаем По моим скромным и весьма оптимистичным подсчетам данный цикл должен выполняться около 10 лет. Не проходит и секунды, на экране верный результат. Добавлено @ 10:38 я так понимаю, ты пишешь в билдере. Я его в глаза не видел но подозреваю, что в нем месть свойства проекта и наверняка можно отключить оптимизацию. в VS 2003 это делается так: меню Project-> Properties->C/C++->optimisation->optimisation->disable но
|
Автор: BlHol 2.5.2006, 11:09 | ||
Тогда вопрос: почему срабатывает первая пауза и не срабатывает вторая при одинаковых строках кода? Я уже пробовал увеличивать счетчик во втором цикле, результат тот же. Я понимаю, что "очень неправильно". Даже с таймером ужо разобрался, а это так, задачка в свободное время. Интерес, чисто, спортивный. Заранее благодарен. С уважением. |
Автор: Hose 2.5.2006, 11:13 |
Кстати у тебя в коде в зеленый цвет окрашивается Label1, а в синий Label2. А из текста создалост впечатление, что ты хочешь один и тотже текст раскрашивать. Возиожно в этом ошибка |
Автор: adonin 2.5.2006, 11:17 | ||||||
Очень интересно, Откомпилял Ваш код с опцией "Assembly with source code". Компилятор VC++ 6.0. Ни какой оптимизации нету:
Смотрите прыжки на метки $L531: и $L532: - это и есть цикл. Добавлено @ 11:24 Hose, Вы правы! VS 2003 в релизе заменил пустой цикл на i=1000000000!!! BlHol, чтобы этого избежать, отключите оптимизацию в компиляторе, или делайте так:
nop - пустая команда, просто такты процессора кушает. И цикл не пустой, поэтому не оптимизируется. Добавлено @ 11:32 Hose, тебе плюс, я бы не додумался до тако объяснения. |
Автор: BlHol 2.5.2006, 11:35 | ||
Сорри! Это я не совсем точно задачу описал. Есть 2 метки. Хочу, чтобы после 1-й паузы одна метка окрашивалась, а после 2-й, вторая (все в одном обработчике). Первая пауза выдерживается (1-я метка окрашивается после 1-го цикла), а вторая нет (т.е. 2-я метка окрашивается тут же). Т.е. складывается ощущение, что два цикла обрабатываются параллельно. Или почти параллельно... |
Автор: cozzzy 2.5.2006, 12:39 |
BlHol, прочитай предыдущий пост ![]() И вообще если хочешь паузу используй функцию Sleep |
Автор: armageddon 4.5.2006, 16:09 |
а почему нельзя, чтобы цикл был не пустой туда забить какаю нибудь не сложныу задачу, например проверка делимости считчика на некоторое число, чтобы результат суммировался..... на мой взгляд должно сработать |
Автор: adonin 5.5.2006, 12:39 |
Можно. |
Автор: Coala 5.5.2006, 13:54 | ||
ЗЫ - вместо Sleep можно использовать цикл по GetTickCount, QueryPerformanceCounter или GetProcessTimes (если надо точно замерять интервал времени). У Sleep вообще-то точность - плюс-минус поллаптя. |
Автор: cozzzy 5.5.2006, 14:26 |
Да, но я уверен, что комраду BlHol, не нужна точность до тысяной секунды А QueryPerformanceCounter тожен не панацея, хоть и самый точный для винды |
Автор: Coala 5.5.2006, 14:34 | ||||
|
Автор: cozzzy 5.5.2006, 15:28 | ||
Угу
|