View previous topic :: View next topic |
Author |
Message |
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Mon Mar 09, 2009 03:27 Post subject: |
|
|
Worros wrote: | Где прочитать, как это делается? Я не умею. | Да ничего читать не надо. Просто дробишь код. Вместо Code: | MoveWindow(gp->DataForThread.ListerWin,20,20,gp->DataForThread.naturewidth,gp->DataForThread.natureheight,true); | пишешь
Code: | HWND hLWnd=gp->DataForThread.ListerWin;
int neww=gp->DataForThread.naturewidth;
int newh=gp->DataForThread.natureheight;
MoveWindow(hLWnd,20,20,neww,newh,true); | И смотришь кто тормозит. Если до вызова MoveWindow, то возможно есть проблема синхронизации доступа к общим переменным из двух разных потоков. Если тормозит сам вызов MoveWindow, то возможно возникает ситуация, когда каждый из двух потоков чего-то ждет. Worros wrote: | И еще, я припоминаю рекомендацию не посылать из потока SendMessage рабочему окну, | Совершенно верно, не рекомендуется. И именно потому что легко может возникнуть клинч. Можно попробовать послать PostThreadMessage главному потоку и уже там делать MoveWindow.
Worros wrote: | IDE удобнее, чем у VC6 , | Конечно удобнее, кто бы спорил. Но глючный. Я же спрашивал, почему ты не ставишь более качественный IDE - VS2008. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Mon Mar 09, 2009 03:36 Post subject: |
|
|
VadiMGP wrote: | Если же она и в самом деле долго выполняется, то разбивай на более простые действия и хронометрируй их. Так и найдешь кто там такой задумчивый.
.........................................................................
Да ничего читать не надо. Просто дробишь код.
| Ну с дроблением то понятно. Я подумал, что нужно хронометрировать по уму, типа профилинга. (я то на глазок)
Проверил. Отвисает именно на MoveWindow(hLWnd,20,20,neww,newh,true);
То есть только перекраивать код? Просто заменить MoveWindow на какой нибудь SetWindowPos или в таком духе не вариант?
Edited : проверил: SetWindowPos тоже тормозит
VadiMGP wrote: | Я же спрашивал, почему ты не ставишь более качественный IDE - VS2008. |
2008 мне совершенно не знаком. И знакомиться не очень хочется. Не раз уже вспоминал хорошим словом тех, у кого в исходниках только проект девятки. Под старую студию запаришься переводить |
|
Back to top |
|
|
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Mon Mar 09, 2009 03:47 Post subject: |
|
|
Worros wrote: | То есть только перекраивать код? Просто заменить MoveWindow на какой нибудь SetWindowPos или в таком духе не вариант? | Ну поэкспериментировать можно, вдруг повезет, но я бы не стал.
Между прочим, в MSDN к MoveWindow хорошая ремарка есть
Quote: | If the bRepaint parameter is TRUE, the system sends the WM_PAINT message to the window procedure immediately after moving the window (that is, the MoveWindow function calls the UpdateWindow function). If bRepaint is FALSE, the application must explicitly invalidate or redraw any parts of the window and parent window that need redrawing.
MoveWindow sends the WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, and WM_NCCALCSIZE messages to the window.
| Значит главный поток должен быть готов обслужить все эти сообщения. Сильно подозреваю, что при SetWindowPos будет та же песня. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|