C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 340 - Сообщения от потоков окну / MFC шаг за шагом / Visual C++

Шаг 340 - Сообщения от потоков окну

Цель данного шага научиться обрабатывать сообщения, которые может посылать поток. Меняйте . Сначала сообщение нужно объявить. Свое сообщение, пользовательское. Все это мы делаем в файле TestThreadDlg.cpp, если не забыли.

......
#endif

const WM_USERMSG=WM_USER+100;

/////////////////////////////////////////
// CAboutDlg dialog used for App About
......

Есть. Теперь нужно создать функцию, которая будет вызываться при появлении этого сообщения.

......
///////////////////////////
// CTestThreadDlg dialog

class CTestThreadDlg : public CDialog
{
// Construction
public:
	void Mess();
	CTestThreadDlg(CWnd* pParent = NULL);	// standard constructor
......

Описать реакции на сообщение:

BEGIN_MESSAGE_MAP(CTestThreadDlg, CDialog)
	//{{AFX_MSG_MAP(CTestThreadDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON2, OnStart)
	ON_BN_CLICKED(IDC_BUTTON1, OnStop)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_USERMSG,Mess)
END_MESSAGE_MAP()

И реализацию самой функции:

void CTestThreadDlg::Mess()
{
	AfxMessageBox("Thread Message");
}

Для того, чтобы поток мог передать сообщение ему нужно знать HWND. Вот и передадим ее в параметрах.

void CTestThreadDlg::OnStart() 
{
	// TODO: Add your control notification handler code here

	HWND hWnd=GetSafeHwnd();
	AfxBeginThread(Threads,hWnd);
}

Сам поток через некоторое время будет посылать сообщение:

UINT Threads(LPVOID pParam)
{
	Sleep(10000);
	::PostMessage(HWND(pParam),WM_USERMSG,0,0);
	return 0;
}

Вот и все. Можно запускать и тестировать. Нажимаете на Start, через некоторое время появится окно говорящее о том, что от потока получено сообщение.


| |
Автор Каев Артем.
[AD]