Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Цель данной стати — обратить внимание разработчиков на проблемы, с которыми можно столкнуться при создании многопоточных приложений. Выявить подводные камни в реализации коммуникации между компонентами в многопоточном приложении.
Observer::CDispatcher g_Dispatcher;
DWORD WINAPI WorkingThread(PVOID)
{
for(;;)
{
g_Dispatcher.SendMessage(NULL);
}
return 0;
}
...
class CMainDlg : public Observer::CSubscriber
{
private:
bool m_bSubscribed;
public:
//Subscriber interface
virtual void MessageHandler(void* pContext)
{
SetWindowText(L"Deadlock test");
}
LRESULT OnTimer(UINT, WPARAM, LPARAM, BOOL& bHandled)
{
if(m_bSubscribed)
{
g_Dispatcher.Unsubscribe(this->GetSubscriberId());
m_bSubscribed = false;
}
else
{
g_Dispatcher.Subscribe(this);
m_bSubscribed = true;
}
bHandled = TRUE;
return 0;
}
LRESULT OnInitDialog(UINT, WPARAM, LPARAM, BOOL&)
{
m_bSubscribed = false;
::CreateThread(NULL, 0, WorkingThread, NULL, 0, NULL);
SetTimer(0, 1);
...
}
...
}
Многопоточный Observer на С++ (практика)