Шаг 337 - Передача указателя на объект в процесс

MFC позволяет нам создавать процессы. Но кроме того мы может передать в процесс и указатель на объект, с которым этот процесс будет работать. Давайте пробовать. Создаем приложение MFC AppWizard на базе диалогового окна с именем TestThread, помещаем на окно кнопку и элемент управления список.

337.gif (7964 b)

Элемент управления список связываем с переменной типа CListBox используя Classwizard.

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

// Dialog Data
	//{{AFX_DATA(CTestThreadDlg)
	enum { IDD = IDD_TESTTHREAD_DIALOG };
	CListBox m_List;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTU
......

И пишем код к кнопке создавая поток:

UINT Threads(LPVOID pParam)
{
	CListBox *cb=(CListBox*) pParam;
	for (int x=1;x<10000;x++)
	{
		cb->AddString("Hello");
	}
	AfxMessageBox("Thread");
	return 0;
}

void CTestThreadDlg::OnStart() 
{
	// TODO: Add your control notification handler code here
	AfxBeginThread(Threads,&m_List);
	AfxMessageBox("Ok");
}

Заполнение списка будет производиться из другого потока. Мы передаем через параметры адрес переменной AfxBeginThread(Threads,&m_List); при запуске потока, а потом восстанавливаем ее в потоке CListBox *cb=(CListBox*) pParam;, так как передали через указатель без типа. Запускайте. Сначала Вы получите сообщение OK, а только через некоторое время, когда поток быдет выполнен, Thread.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.05.2001