Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 837
от 01.09.2007, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 504, Экспертов: 69
В номере:Вопросов: 2, Ответов: 7


Вопрос № 99780: Доброго времени суток! Как в С++ обрабатывать сообщения от системы? Т.е. есть цикл содержащий Sleep(); и создается впечатление что прога "висит". Аналоги в Delphi - Application.ProcessMessages; в C# - Application.DoEvents();<br...
Вопрос № 99842: Подскажите, пожалуйста, чем конкретно отличаются среды разработки на C++ в MS Visual Studio от Borland Developer Studio? Планирую начать изучение, но не знаю какую из них выбрать. Интересуют в первую очередь удобство работы, наличие библиотек и подде...

Вопрос № 99.780
Доброго времени суток!
Как в С++ обрабатывать сообщения от системы?
Т.е. есть цикл содержащий Sleep(); и создается впечатление что прога "висит".
Аналоги в Delphi - Application.ProcessMessages; в C# - Application.DoEvents();
уверен, что и в с++ должно быть, вот только не докопал =
Ну или может существуют какие-то спец. способы для Sleep();
Отправлен: 27.08.2007, 00:27
Вопрос задал: aaqs (статус: 5-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Зотов Дмитрий Владимирович
Здравствуйте, aaqs!
Application->ProcessMessages();
Ответ отправил: Зотов Дмитрий Владимирович (статус: 2-ой класс)
Ответ отправлен: 27.08.2007, 01:17
Оценка за ответ: 4
Комментарий оценки:
это для Borland C++, а его считать за C++ нельзя;)
я имел ввиду, код для студии

Отвечает: din
Здравствуйте, aaqs!
Application.ProcessMessages в Delphi проверяет наличие каких бы то ни было сообщений адресованных приложению или его объектам (нажата кнопка мыши, прогресс бар пытался отрисоваться и т.п.). В VS нужно будет это реализовать самому, создав обработчик (ловушку) сообщений (конкретно под используемуе библиотеку WIn32 API или MFC). Если Вы испоьзуете C++ реализацию под .NET то у него есть аналогичный метод в классе Apllication (пространство имен System.Windows.Forms) вызывается также Application::DoEvents().

P.S. А вообще, для решения такого рода проблем, лучше использовать многопоточность. Это отдельная и большая тема для разговора.

Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Практикант)
Ответ отправлен: 27.08.2007, 07:18
Оценка за ответ: 5
Комментарий оценки:
спасибо.
загляните пожалуйста в минифорум.

Отвечает: Sergey A. Wedensky
Здравствуйте, aaqs!

Если пишете на MFC, то, скорее всего класс потока (или приложения) унаследован от CWinThread. У CWinThread есть метод PumpMessage().
С точки зрения API нужно просто вытаскивать из очереди оконные сообщения и передавать обработчикам. Попробуйте вставить в Ваш цикл что-то подобное:

MSG msg;
if (PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg); // для длавиатурных акселераторов
DispatchMessage(&msg);
}

Если Sleep на долго, придется написать функцию типа SleepWithMessageLoop, которая в цикле производит указанные действия, не блокируя поток надолго.

А вообще, полностью согласен с экспертом din - для таких случаев и существует многопоточность.
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 27.08.2007, 09:35
Оценка за ответ: 5
Комментарий оценки:
спасибо.
загляните пожалуйста в минифорум.

Отвечает: Aristos
Здравствуйте, aaqs!

При работе средствами WinAPI, необходимо создавать цикл обработки сообщений. В приложении пример такого приложения с окном и обработкой сообщений.

ps: функция Sleep() приостанавливает выполнение приложения на указанное (или большее) кол-во миллисекунд, так что впечатление "висящей" программы верно )

Приложение:

Ответ отправил: Aristos (статус: 4-ый класс)
Ответ отправлен: 27.08.2007, 14:45
Оценка за ответ: 5
Комментарий оценки:
спасибо за окно на api :)
вот только у меня вообще не оконное приложение ))
а со Sleep() вопрос уже снят


Вопрос № 99.842
Подскажите, пожалуйста, чем конкретно отличаются среды разработки на C++ в MS Visual Studio от Borland Developer Studio? Планирую начать изучение, но не знаю какую из них выбрать. Интересуют в первую очередь удобство работы, наличие библиотек и поддержка. Моя основная цель: разработка 3D-приложений.
Отправлен: 27.08.2007, 14:44
Вопрос задал: Сорокка Павел (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Сорокка Павел!
тут уже был такой вопрос. Достаточно воспользоваться поиском. Отличаются. Главным образом инструментарием, каркасными библиотеками, оптимизаторами кода и прочим. Я бы предпочел первую, хотя одинаково владею обеими средами разработки. Успехов.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
----
Ответ отправлен: 27.08.2007, 14:51

Отвечает: Новиков Андрей Викторович
Здравствуйте, Сорокка Павел!
Если Вы собераетесь писать 3D приложения то MS Visual Studio на мой взгляд наиболее правельный выбор. Особено ели использовать MFC. Borland Developer Studio, на мой взгляд, наиболее эффективна при разработке прикладных программ.
Ответ отправил: Новиков Андрей Викторович (статус: 1-ый класс)
Ответ отправлен: 27.08.2007, 15:21

Отвечает: Виктор Пырлик
Здравствуйте, Сорокка Павел!

MS Visual Studio - разработано Microsoft, более чище, в плане языка, более сложна как в изучении так и в работе, но результат – не нагруженные лишнем исполняемые файлы / библиотеки, и пожалуй, в ней приятней работать – если цель, писать на С/С++. Так же, более удобная среда для разработчика. И это «родная» среда Windows. В последних версиях добавилась технология .NET это отдельная, огромная тема.
Borland Developer Studio - разработано Borland ,это монстробразный пакет, включающий разные языки и кучу библиотек собственного формата. В плане удобства да, но язык уходит на второй план – много всего рафинированного, и не всегда оптимально выполнено. В то же время, для обучения намного легче чем MS VS. Если цель – разработка АРМ, это лучший выбор, иначе, наверно стоит выбрать MS VS. Имеет множество компонентов в том числе и сторонних разработчиков. Концепция – ООП, но больше компонентно-ориентированная. Похоже на конструктор – где каждый кубик имеет событие которое и определяется программистом.
------------------
Вывод - я бы, если бы только начинал изучать, начал с "чистого" С/С++, но сегодня, наверно всетаки выбрал бы MS VS.

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 27.08.2007, 15:45


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.58 от 30.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное