Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Завершение While

290
18 августа 2008 года
Patr1ot
458 / / 09.02.2008
Доброго времени суток всем.
У меня вот какая проблемка.

Написал программку, в ней стоит цикл While, причем во время работы
цикла программа как будто виснет и закрывается с принудительным завершение через диспетчер задач.
 
Код:
AnsiString gg;
while (true)
{
 DateTimeToString(gg,"hhmm",Now());
 if (gg == 1255)
  ShowMessage("Пример");
}


Вот. И из-за этого неполучается понормальному закрыть программу.
Неподскажите как лучше мне это сделать, я дамул может не через
Close(); закрывать программу а сразу сам процесс грохать.

______________________________
Вроде проблема ерунда, а программа не пашет
288
18 августа 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: Patr1ot

Неподскажите как лучше мне это сделать, я дамул может не через



Лучше всего не использовать такой цикл, т.к. это большая и бесполезная нагрузка процессора. Используйте лучше WaitableTimer

92
18 августа 2008 года
Тень Пса
2.2K / / 19.10.2006
да, таки таймер будет нормальныйм выходом из ситуации подсчёта времени :D

а вообще, на будущее, дайствия выполняемые в цикле, всегда будут вешать программу, пока цикл не завершится, программа не будет откликаться. во избежании этого, но при большой надобности выполнения чего-нить в цикле, используй потоки. благо, тем про их использование было более чем...
41K
19 августа 2008 года
wWo_
5 / / 18.08.2008
Да он прав тебе надано воспользоваться другим методом.
Цикл все равно тебе не закрыть так просто. Легче сразу процесс грохуть, но и тут проблема как тебе программа сама себя сможет грохнуть.

________________________________
Не можешь срать не мучай жопу:)
8.8K
20 августа 2008 года
Se AD WMD
165 / / 10.01.2007
В соседней теме:
[quote=0nni]
попробуй в цикле ... поставить

 
Код:
Application->ProcessMessages();

Вообще ставь ее во всех длинных циклах...
[/quote]
9.3K
22 августа 2008 года
iridum
175 / / 26.08.2007
А чтобы не грузило процессор, добавь кроме

 
Код:
Application->ProcessMessages();


еще и

 
Код:
Sleep(1);
288
23 августа 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: iridum
А чтобы не грузило процессор, добавь кроме

 
Код:
Application->ProcessMessages();


еще и

 
Код:
Sleep(1);



И вы считаете, что это не будет грузить процессор? Бесполезный цикл, который зря занимает процессорное время, да еще и заставляет систему каждую миллисекунду пробуждать и усыплять поток? Application->ProcessMessages(); вещь конечно полезная, но не в этом случае. Она применяется, когда выполняется дейстивтельно затяжное действие. Для ожидания же чего-либо - ИМХО надо юзать потоки и объекты синхронизации.

9.3K
24 августа 2008 года
iridum
175 / / 26.08.2007
Цитата: nikitozz
И вы считаете, что это не будет грузить процессор? Бесполезный цикл, который зря занимает процессорное время, да еще и заставляет систему каждую миллисекунду пробуждать и усыплять поток? Application->ProcessMessages(); вещь конечно полезная, но не в этом случае. Она применяется, когда выполняется дейстивтельно затяжное действие. Для ожидания же чего-либо - ИМХО надо юзать потоки и объекты синхронизации.



Ну вообще я согласен с тем что нужно использовать для таких дел вейтебл таймер или отдельный поток. А вот насчёт sleep(1) то это вы ошиблись, вопервых вы сами проверте, используя sleep(1) загрузка процессора будет не 100%, а 10%-20%, поэтому для других приложений останутся ресурсы, а не как предлогаете вы крутить одни и те же ф-и до 100% загрузки проца (допустим в отдельном потоке), а кроме того не будет там той милисекунды, как бы этого не хотелось.....

288
25 августа 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: iridum
Ну вообще я согласен с тем что нужно использовать для таких дел вейтебл таймер или отдельный поток. А вот насчёт sleep(1) то это вы ошиблись, вопервых вы сами проверте, используя sleep(1) загрузка процессора будет не 100%, а 10%-20%, поэтому для других приложений останутся ресурсы



Ну может погорячился :) не 100%, хотя я о 100 и не говорил ;)
Но согласитесь, 10-20% для программы, которая в данный момент ничего фактически не делает - это очень много. Компиляция проекта в MSVC у меня приводит к загрузке моего слабенького процессора на 20%, так что для программы просто ожидающей - это просто расточительство :)
Не спорю, в некоторых и конкретных случаях этот способ (бесконечный цикл со Sleep) может использоваться, но принимать его как алгоритм ожидания не стоит.

Цитата: iridum

а не как предлогаете вы крутить одни и те же ф-и до 100% загрузки проца (допустим в отдельном потоке)



В том и все дело, что я напротив это и не предлагаю, я против этого. Я предлагаю приостановить поток (исключить его из планируемых), до тех пор, пока не произойдет какое-либо событие. С несколькими потоками же я предлагаю поиграться только в случае если вы хотите обрабатывать в это время пользовательские сообщения ( Application->ProcessMessages() )

290
26 августа 2008 года
Patr1ot
458 / / 09.02.2008
[HTML]
Лучше всего не использовать такой цикл, т.к. это большая и бесполезная нагрузка процессора. Используйте лучше WaitableTimer
[/HTML]

Чето у меня неполучается воспользоваться Waitable Timer.

Это же из Win API функций, да?

В справке написано типа Waitable Timer ( параметр, параметр, параметр, параметр)
а что за параментры, я непонимаю английский, и переводчик, не переводит. Что делать?

______________________________
Извените но что имею то имею:(
288
26 августа 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: Patr1ot
а что за параментры, я непонимаю английский, и переводчик, не переводит. Что делать?



Читать Рихтера в русском переводе. Или какой-нибудь хороший справочник по WinAPI.
Вот вам еще пример из MSDN'а.

Код:
#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <stdio.h>

int main()
{
    HANDLE hTimer = NULL;
    LARGE_INTEGER liDueTime;

    liDueTime.QuadPart=-100000000;

    // Create a waitable timer.
    hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
    if (!hTimer)
    {
        printf("CreateWaitableTimer failed (%d)\n", GetLastError());
        return 1;
    }

    printf("Waiting for 10 seconds...\n");

    // Set a timer to wait for 10 seconds.
    if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
    {
        printf("SetWaitableTimer failed (%d)\n", GetLastError());
        return 2;
    }

    // Wait for the timer.

    if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
        printf("WaitForSingleObject failed (%d)\n", GetLastError());
    else printf("Timer was signaled.\n");

    return 0;
}
246
26 августа 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: Patr1ot

В справке написано типа Waitable Timer ( параметр, параметр, параметр, параметр)
а что за параментры, я непонимаю английский, и переводчик, не переводит.


Так иди в школу, на английский.

Цитата: Patr1ot

Что делать?


убица ап стенку:))

255
26 августа 2008 года
Dart Bobr
1.4K / / 09.04.2004
Цитата: Patr1ot

Чето у меня неполучается воспользоваться Waitable Timer.


Это работает только у тех, кто лично знаком с Биллом Гейтсом.

Цитата: Patr1ot

В справке написано типа Waitable Timer ( параметр, параметр, параметр, параметр)
а что за параментры, я непонимаю английский, и переводчик, не переводит. Что делать?


вариантов много:
-пойти учить английский
-найти нормальный переводчик
-забросить это все нафиг и заняться чем-то, где от тебя будет больше толку.
Третий вариант - предпочтительней.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог