![]() |
|
|
![]()
|
|
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
Давно мучил вопрос, а вот как правильно реализовать for( ; ; ) или допустим while(не получим WM_Завершение приложения) в программе, на основе окна, + почему-то постоянно идёт загрузка проца на 100 %, как это исправить ?
Добавлено @ 05:44 Может применять класс для нового окна, а там вставить этот цикл, а само окно не показывать, тогда будет казаться, что это приложение занимется циклом, но загрузка проца всё равно на 100%... ????????????????? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
бесконечный цикл означает, что нужно сделать много работы
а если есть много работы, то почему бы и не загрузить процессор по полной от оконности приложения это не зависит: бесконечный цикл в консольном приложении даст такой же результат тут надо немного поточнее определиться, что на самом деле нужно (если, например, идет ожидание чего-то, то можно воспользоваться каким-нибудь методом синхронизации, например, таймером) -------------------- qqq |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
"тут надо немного поточнее определиться, что на самом деле нужно"
"идет ожидание чего-то" вот именно это, но помоему в консольной реализациии при for(; ; ) такого не было... "то можно воспользоваться каким-нибудь методом синхронизации, например, таймером" А как? в смысле действующий пример не подкините? Добавлено @ 11:31 Может проблема в том, что я использую цикл перед обработчиком сообщений? |
|||
|
||||
| Mad |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 2 Всего: 19 |
общий вид (без синхранизации, обычно применяется в играх
|
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
реализация зависит как раз от "этого" дело в том, что в Windows можно ожидать практически чего угодно (таймеры, ввод/вывод, завершение потоков или процессов, семафоры и много чего еще) так что вариант с таймером может оказаться далеко не лучшим я бы посоветовал почитать MSDN--Platform SDK--Base Services--DLLs, Processes and Threads--Synchronization (там, кстати, есть и примеры для многих вариантов синхронизации) P.S. а вообще, я бы не советовал выполнять очень много вычислений в потоке окна: это может сильно испортить интерфейс (кнопочки перестанут нажиматься, окно не будет перерисовываться, пользователь запаникует лучше запустить еще один поток и обмениваться с ним время от времени информацией... -------------------- qqq |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
"лучше запустить еще один поток и обмениваться с ним время от времени информацией..."
Во как раз то что мне нужно, а ссылку не дашь, или сам пример не приведёшь? Мне надо допустим, чтобы тот поток с циклом выполн. след. : цикл -> поток поток -> осн. прогр. цикл -> отловлено событие. поток -> сообщение WM_%%% -> осн. прогр. |
|||
|
||||
| maxim1000 |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
а вот этого и не понял я вот тут подумал: может, просто сделать еще одно окно (и не показывать его) и общаться с помощью SendMessage
ссылка все та же: MSDN, там много об этом написано что касается примера, может, такое подойдет: 1. функция потока:
2. при создании окна:
3. при получении сообщения
при этом должны быть объявлены две глобальные переменные: HANDLE WritePipe,ReadPipe; только код я не проверял (т.к. это только куски) конечно, для подобных вещей лучше использовать Event, но я с ним не работал, так что на вскидку код не напишу... -------------------- qqq |
||||||||||
|
|||||||||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 2 Всего: 19 |
Для месажей окно не обязательно, есть же еще PostThreadMessage() |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
Мда почитав XI часть "Visual C++ & MFC"
понял следующие : "Потоки - гениальны, но не просты..." Буду долбить потоки... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |