DWORD thpostid;
DWORD thpeekid;
#define MSG_PEEK WM_USER+20
ULONG WINAPI testpost(LPVOID lparam)
{
unsigned long lasttime;
char *aa = (char *)malloc(8);
memcpy(aa, "asdf", 5);
PostThreadMessage(thpeekid, MSG_PEEK, 0, (long)aa);
PostThreadMessage(thpeekid, MSG_PEEK+1, 0, (long)aa);
return 0;
}
void CTestMsgQueueDlg::OnButtonPostmsg()
{
HANDLE hth;
hth = CreateThread(0, 0, testpost, 0, 0, &thpostid);
}
ULONG WINAPI testpeek(LPVOID lparam)
{
MSG msg;
char *bb;
PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE);
while (1)
{
if (PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE))
{
switch (msg.message)
{
case MSG_PEEK:
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
switch (msg.message)
{
case MSG_PEEK:
bb = (char *)msg.lParam;
free(bb);
TRACE("\ni remove now"); // 打印一次
break;
}
}
case MSG_PEEK+1:
TRACE("\n i am still here"); // 会一直打印
Sleep(3000);
break;
default:
TRACE("\n i got something irelevant");
}
}
}
return 0;
}
void CTestMsgQueueDlg::OnButtonPeekmsg()
{
HANDLE hth;
hth = CreateThread(0, 0, testpeek, 0, 0, &thpeekid);
}
DWORD thpeekid;
#define MSG_PEEK WM_USER+20
ULONG WINAPI testpost(LPVOID lparam)
{
unsigned long lasttime;
char *aa = (char *)malloc(8);
memcpy(aa, "asdf", 5);
PostThreadMessage(thpeekid, MSG_PEEK, 0, (long)aa);
PostThreadMessage(thpeekid, MSG_PEEK+1, 0, (long)aa);
return 0;
}
void CTestMsgQueueDlg::OnButtonPostmsg()
{
HANDLE hth;
hth = CreateThread(0, 0, testpost, 0, 0, &thpostid);
}
ULONG WINAPI testpeek(LPVOID lparam)
{
MSG msg;
char *bb;
PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE);
while (1)
{
if (PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE))
{
switch (msg.message)
{
case MSG_PEEK:
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
switch (msg.message)
{
case MSG_PEEK:
bb = (char *)msg.lParam;
free(bb);
TRACE("\ni remove now"); // 打印一次
break;
}
}
case MSG_PEEK+1:
TRACE("\n i am still here"); // 会一直打印
Sleep(3000);
break;
default:
TRACE("\n i got something irelevant");
}
}
}
return 0;
}
void CTestMsgQueueDlg::OnButtonPeekmsg()
{
HANDLE hth;
hth = CreateThread(0, 0, testpeek, 0, 0, &thpeekid);
}