![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Соощения и потоки
_Anton © (2005-06-15 19:51:00)Столкнулся с тем, что надо послать свое сообщение из
одного потока в другой.
делаю так:
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;
не работает, системные сообщения отрабатывают нормально
как правильно сделать?
alpet (2005-06-16 13:00:00) [1]> а рисовать можно только в WM_PAINT
С чего это вдруг? Другое дело что если обработчик твой и отрабатывает (что-то рисует), окно при перерисовке его системой затрет все что он нарисовал.
_Anton (2005-06-16 10:59:00) [2]Приношу свои извинения - всё отлично работает.
Просто я в этом обработчике пытался рисовать:
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 10:07:00) [3]У тебя сообщение вполне может отправиться до того как второй поток создаст свой цикл обработки сообщений. В таких случаях надо синхронизацию делать. И с WM_USER надо помнить что много сообщений с его участием есть, например твое WM_USER+1 == DM_SETDEFID.
Digitman (2005-06-16 08:09:00) [4]
> цикл обработки как положено
где тут "цикл" ? нет никакого цикла в твоем коде