Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
////////////////////////////////////////////////////////////
//
// interface.cpp
//
#include "stdafx.h"
#include "interface.h"
BOOL PostMessage(BUFFER* buf, DWORD Id, UINT Msg, DWORD receiver, WORD Param)
/*+
BUFFER* buf - buffer where message post to
DWORD Id - process ID posting message
UINT Msg - message
DWORD receiver - message receiver process ID
return - TRUE if successful, otherwise FALSE
-*/
{
for (int i = 0; i <= QUEUE_SIZE; i++)
{
if (!buf->m_Messages[i].m_Used)
{
buf->m_Messages[i].m_Used = TRUE;
buf->m_Messages[i].m_Next = NULL;
buf->m_Messages[i].m_Receiver = receiver;
buf->m_Messages[i].m_Message = Msg;
buf->m_Messages[i].m_Param = Param;
buf->m_Messages[i].m_Sender = Id;
if (buf->m_Tail)
{
buf->m_Tail->m_Next = &buf->m_Messages[i];
buf->m_Tail = &buf->m_Messages[i];
}
else
{
buf->m_Head = buf->m_Tail = &buf->m_Messages[i];
}
return TRUE;
}
}
ASSERT(0);
return FALSE;
}
BOOL PeekMessage(BUFFER* buf, DWORD Id, UINT Msg, DWORD& sender, WORD& Param)
/*+
BUFFER* buf - beffer where message dispath from
DWORD Id - process ID dispatching message
UINT Msg - message
return - FALSE if not successful, otherwise TRUE
DWORD& sender - message sender
-*/
{
QUEUE_ELEM* cur = buf->m_Head;
QUEUE_ELEM* prev = NULL;
while (cur)
{
if ((cur->m_Receiver == Id) && (cur->m_Message == Msg))
{
ASSERT(cur->m_Used);
cur->m_Used = FALSE;
if (prev)
{
prev->m_Next = cur->m_Next;
if (!prev->m_Next) buf->m_Tail = prev;
}
else
{
buf->m_Head = cur->m_Next;
if (!buf->m_Head) buf->m_Tail = buf->m_Head;
}
sender = cur->m_Sender;
Param = cur->m_Param;
return TRUE;
}
prev = cur;
cur = cur->m_Next;
}
return FALSE;
}
BOOL DispatchMessage(BUFFER* buf, DWORD Id, UINT& Msg, DWORD& sender, WORD& Param)
/*+
BUFFER* buf - beffer where message dispath from
DWORD Id - process ID dispatching message
return - FALSE if not successful, otherwise TRUE
UINT& Msg - message
DWORD& sender - message sender
-*/
{
QUEUE_ELEM* cur = buf->m_Head;
QUEUE_ELEM* prev = NULL;
while (cur)
{
if (cur->m_Receiver == Id)
{
ASSERT(cur->m_Used);
cur->m_Used = FALSE;
if (prev)
{
prev->m_Next = cur->m_Next;
if (!prev->m_Next) buf->m_Tail = prev;
}
else
{
buf->m_Head = cur->m_Next;
if (!buf->m_Head) buf->m_Tail = buf->m_Head;
}
Msg = cur->m_Message;
sender = cur->m_Sender;
Param = cur->m_Param;
return TRUE;
}
prev = cur;
cur = cur->m_Next;
}
return FALSE;
}
Соседние файлы в папке 1
