Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2008, 19:30   #1
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
По умолчанию прием сообщений win32

блин, делаю курсовую (надо на билдере6м) - алгоритм решения рекурсивный, поэтому обновляется только кусок окна с граф инфой, дальше на сообщения окно не реагирует

вставил функцию

Код:
bool _update()
{
 MSG msg;
  if (!GetMessage(&msg, NULL, NULL, NULL))
  {
   return true;
  }


  if(msg.message == WM_DESTROY || msg.message == WM_CLOSE)
        exit(0);

  if(msg.message == WM_LBUTTONDOWN || msg.message == WM_LBUTTONUP || msg.message == WM_LBUTTONDBLCLK)
        {
        if(MessageBox(0,"Àëãîðèòì ðåêóðñèâíûé, è òðåáóåò n^2 - 1 èòåðàöèé.\nÎñòàíîâèòü âûïîëíåíèå àëãîðèòìà?","Âíèìàíèå!",MB_YESNO) == 6)
        return false;
        }
  ::TranslateMessage(&msg);
  ::DispatchMessage(&msg);
}
теперь решение подвисает когда не приходят никакие сообщения (вожу мышкой по окну - алгоритм продолжает выполнение)

чтобы среагировало на щелчки мышкой нужно долбить конкретно по окну,
закрытие ваще никак....

может кто что подскажет
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04
oto_aki вне форума Ответить с цитированием
Старый 26.02.2008, 19:47   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от oto_aki Посмотреть сообщение
может кто что подскажет
Подскажем. Если увидим, откуда _update() вызывается.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 19:55   #3
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
По умолчанию

прямо из функции решения, (она с рекурсией)

есть окно (Form1)
есть GameClass

нажали кнопку - пошло решение из GameClass (функция с рекурсией)
при проходе функции решения вызывается функция рисующая на окне, потом еще _update
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04
oto_aki вне форума Ответить с цитированием
Старый 26.02.2008, 19:58   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Тогда надо GetMessage, заменить на PeekMessage. GetMessage - блокирующая поток функция.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 20:10   #5
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
По умолчанию

хы, теперь ваще не отвечает )) зато алгоритм отлично рабатает

..
щас брейкпоинтов наставил - в общем функция выполняется нормально реагирует, только вот почему то

Код:
if(msg.message == WM_LBUTTONDOWN || msg.message == WM_LBUTTONUP || msg.message == WM_LBUTTONDBLCLK)
не определяет щелчки...

и теперь еще окно не доступно - если его попытаться передвинуть - то передвинется только после выхода из рекурс. функции
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04

Последний раз редактировалось oto_aki; 26.02.2008 в 20:19.
oto_aki вне форума Ответить с цитированием
Старый 26.02.2008, 20:15   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Код:
if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)){
	//////.............
	TranslateMessage(&Msg);
	DispatchMessage(&Msg);
}
-----------------------------------
Цитата:
Сообщение от oto_aki Посмотреть сообщение
не определяет щелчки...
и теперь еще окно не доступно - если его попытаться передвинуть - то передвинется только после выхода из рекурс. функции
А Вы как хотели? Вызывайте _update() чаще, если ее раз в полчаса вызывать, а всё остальное время валить поток вычислениями, ничего волшебным образом само двигаться не будет.

Последний раз редактировалось B_N; 26.02.2008 в 20:41.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 20:30   #7
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
По умолчанию

аригато, ща потестим
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04
oto_aki вне форума Ответить с цитированием
Старый 26.02.2008, 20:46   #8
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
По умолчанию

2B_N

слуш, а не подскажешь как получить сообщение с конкретной кнопки (Buider)? Просто у меня отрисовки с паузой в 0.7 сек и походу сообщения о щелчках мыши просто не успевают проходить, из-за этого приходиться долбить мышкой по окну нервно - подумал - легче кнопку Stop добавить
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04
oto_aki вне форума Ответить с цитированием
Старый 26.02.2008, 20:51   #9
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

С какой-такой конкретной кнопки? Куда они не успевают приходить, если WM_МЫШКА и WM_КЛАВИАТУРА складываются в очередь. Надо чаще вызывать обработку сообщений. Или устраивать из вычислений отдельный поток.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 20:58   #10
oto_aki
Пользователь
 
Аватар для oto_aki
 
Регистрация: 07.12.2007
Сообщений: 14
По умолчанию

Цитата:
B_N С какой-такой конкретной кнопки? Куда они не успевают приходить, если WM_МЫШКА и WM_КЛАВИАТУРА складываются в очередь. Надо чаще вызывать обработку сообщений.
круто , пасиб, щас впихнул в разных кусках вызов _update еще 3 раза - стало терпимо)
уже выкачал книжку и справочник по Win32 - надо бы почитать)
AMD Athlon X2 5600+, Asus M2N-E nForce570 Ultra, 1Gb x 3 Kingston DDR2 667@800, Asus GeForce 7900 GT 256 Mb @(690,1800 VMod 1.55 + Zalman))),serial ATA Seagate 320Gb, WD 250 Gb, Seagate 500Gb, Pioner 210D (Sata).
OS - Win XP SP2, Ubuntu 8.04

HP 6720s (C2D T7250), OS - Ubuntu 8.04
oto_aki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват сообщений от Службы сообщений (Messenger) SJMS Win Api 6 17.07.2008 10:26
Функции Win32 API Для работы со звуком FSS Win Api 2 29.01.2008 04:41
Что такое Win32 API Slovinsky Свободное общение 10 29.10.2007 10:46
Прием SMS SERG1980 Свободное общение 0 04.10.2007 16:10