Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизСоощения и потоки Найти похожие ветки
← →
_Anton (2005-06-15 19:51) [0]Столкнулся с тем, что надо послать свое сообщение из
одного потока в другой.
делаю так:
1-й поток:
#define WM_SENT_TEXT_TO_WINDOW WM_USER+1
void __fastcall CTread_LoadFiles::Execute()
{
objTread_display_load_pocess = new CTread_display_load_pocess(false, x, y, Width, Height, Window_name);
Sleep(1); //
maked_TrId = objTread_display_load_pocess->TrId;
maked_Tr_hwnd = objTread_display_load_pocess->hwnd;
PostThreadMessage(maked_TrId, WM_SENT_TEXT_TO_WINDOW,0,0);
}
=============================
второй поток:
#define WM_SENT_TEXT_TO_WINDOW WM_USER+1
цикл обработки как положено, а в нем:
case WM_SENT_TEXT_TO_WINDOW: {
hdc = BeginPaint(hwnd, &ps);
TextOut( hdc, 15, 15, "USER", 5);
EndPaint(hwnd, &ps); }
break;
не работает, системные сообщения отрабатывают нормально
как правильно сделать?
← →
Digitman © (2005-06-16 08:09) [1]
> цикл обработки как положено
где тут "цикл" ? нет никакого цикла в твоем коде
← →
alpet © (2005-06-16 10:07) [2]У тебя сообщение вполне может отправиться до того как второй поток создаст свой цикл обработки сообщений. В таких случаях надо синхронизацию делать. И с WM_USER надо помнить что много сообщений с его участием есть, например твое WM_USER+1 == DM_SETDEFID.
← →
_Anton (2005-06-16 10:59) [3]Приношу свои извинения - всё отлично работает.
Просто я в этом обработчике пытался рисовать:
case WM_SENT_TEXT_TO_WINDOW: {
hdc = BeginPaint(hwnd, &ps);
TextOut( hdc, 15, 15, "USER", 5);
EndPaint(hwnd, &ps); }
break;
а рисовать можно только в WM_PAINT
← →
alpet © (2005-06-16 13:00) [4]>а рисовать можно только в WM_PAINT
С чего это вдруг? Другое дело что если обработчик твой и отрабатывает (что-то рисует), окно при перерисовке его системой затрет все что он нарисовал.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c