Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > CreateThread + SendMessage


Автор: sergey_85 17.5.2011, 13:44
Привет!

Есть простенькое winapi приложением. В нём 1 окно + поток (созданный через CreatedThread). Поток качает файл из инета, как правильно отправить сообщение  из потока в главное окно с данными о том сколько байт скачено? 

Спасибо!

Автор: GremlinProg 17.5.2011, 13:58
Цитата(sergey_85 @  17.5.2011,  15:44 Найти цитируемый пост)
как правильно отправить сообщение  из потока в главное окно с данными о том сколько байт скачено?

например, так:
Код

::PostMessage( hwndMain, WM_SOME_USER_MESSAGE, 0, LPARAM( progress ) );

WM_SOME_USER_MESSAGE - какое-нить сообщение, например:
Код

#define WM_SOME_USER_MESSAGE ( WM_USER + 500 )

которое надо обработать в WndProc,

в данном случае, в lParam передается "сколько байт скачено"

Автор: ASMatic 17.5.2011, 13:59
Код

SendMessge( WM_COPYDATA );    //=v1
#define MM_RECVD_SIZE      WM_USER+1
SendMessage( MM_RECVD_SIZE );      //=v2


v2 предпочтительней для текущей задачки.

пс_кто у нас быстрее всех - GremlinProg ессесно же.)

Автор: sergey_85 17.5.2011, 16:07
Если из потока отправляю сообщение через SendMeesage, поток блокируется, пока не выполниться сообщение в  главном потоке, так? 

Автор: Dem_max 17.5.2011, 16:46
Цитата(sergey_85 @ 17.5.2011,  16:07)
Если из потока отправляю сообщение через SendMeesage, поток блокируется, пока не выполниться сообщение в  главном потоке, так?

Да, но не следует использовать SendMessage, лучше PostMessage

Автор: ASMatic 17.5.2011, 18:15
Цитата(Dem_max @  17.5.2011,  14:46 Найти цитируемый пост)
Да, но не следует использовать SendMessage, лучше PostMessage

Ничо против не имею, но интересно почему?

Автор: GremlinProg 17.5.2011, 19:33
потому что с SendMessage можно ненароком сделать дедлок,
заблокировав очередь сообщений на ожидании какой-либо реакции от этого же потока ( простой пример - закрыть программу в момент такой блокировки: если приложение корректно завершает поток, ожидая завершения функции потока, то это ожидание и породит дедлок )

Автор: ASMatic 18.5.2011, 00:31
GremlinProg, ясн, это все от реализации зависит....думал мож какие системные тонкости по этому поводу есть.

Автор: Dem_max 18.5.2011, 06:52
вообще прочитай это
http://wm-help.net/books-online/book/59464/59464-20.html#h26

Автор: ASMatic 18.5.2011, 16:37
Dem_max, сэнкс

Автор: Alca 18.5.2011, 18:14
Вот еще http://forum.vingrad.ru/forum/topic-60076/view-all.html

Автор: ASMatic 19.5.2011, 10:13
Alca, ну спсиб, с потокаме не дружу и без дельфи жить не могу.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)