希望调用PostThreadMessage给一个指定的线程发消息,
thread[i]->PostThreadMessage(WM_TEST, len, (long)pIorb->pData);
第二个和第三个参数分别是消息长度和内容。
调用getMessage函数时如何实现?
也是用GetMessage(&msg, NULL, len1, (long) pIorb->pData)吗?
求各位大侠们给点建议和例子。
thread[i]->PostThreadMessage(WM_TEST, len, (long)pIorb->pData);
第二个和第三个参数分别是消息长度和内容。
调用getMessage函数时如何实现?
也是用GetMessage(&msg, NULL, len1, (long) pIorb->pData)吗?
求各位大侠们给点建议和例子。
解决方案 »
- 高手
- OCX可否调用javascript
- 求两个软件:
- 利用MFC(DLL)编程,怎么运行的程序会出现让我选择EXE文件的对话框
- 对话框的内容用scrollbar滚动,对话框的滚动是响应什么消息?
- ISAPI Filter使用DllMain( )函数
- 为何调用GetClientRect()得出rect的结果不一样?
- BHO 监控页面刷新事件有什么好办法吗?
- Win 7 shell扩展 注册成功却未见效果
- 两个相互无关的窗口类,如何在一个类中调用另外一个类的成员函数
- >>>>>>>>>>>>我如何给一个进程加上消息钩子???<<<<<<<<<<<<<<
- 请问在VC中gettimeofday怎么使用,该系统调用的头文件是什么
LPMSG lpMsg, // message information
HWND hWnd, // handle to window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax // last message
);if(GetMessage(&msg, NULL, 0, 0))
{
switch(msg.message)
{
case WM_TEST:
...
}
}
UINT TestThread(LPVOID pParam)
{
MSG msg;
int n=1;
while(n){
while(::GetMessage(&msg,NULL,0,0)){
if(msg.message==MY_QUIT){
n=0;
break;
}
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
AfxMessageBox("线程结束");
return 0L;
}开始线程
CWinThread *pThread=AfxBeginThread(TestThread,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
DWORD ThreadId=pThread->m_nThreadId;
::PostThreadMessage(ThreadId,MY_QUIT,0,0);
{
WSANETWORKEVENTS networkEvent;
unsigned int receivedReqType;
SOCKADDR_IN addr;
data.soListen =socket(AF_INET,SOCK_STREAM,0);
addr.sin_addr.S_un .S_addr=htonl(INADDR_ANY);
addr.sin_family=AF_INET;
addr.sin_port =htons(7777);
bind(data.soListen ,(LPSOCKADDR)&addr,sizeof(addr));
listen(data.soListen,1);
::WSAEventSelect (data.soListen ,data.evListen ,FD_ACCEPT); while(::WaitForSingleObject (data.evStop ,100)==WAIT_TIMEOUT)
{
nextIncome:
if(WaitForSingleObject (data.evListen ,100)!=WAIT_OBJECT_0)//无接入
{
continue;
}
if(WSAEnumNetworkEvents(data.soListen ,data.evListen ,&networkEvent)!=0)//失败
{
goto nextIncome;
}
if(networkEvent.lNetworkEvents !=FD_ACCEPT)
{
goto nextIncome;
} data.soWork =::accept (data.soListen ,NULL,0);
::WSAEventSelect (data.soWork ,data.evWork ,FD_READ|FD_CLOSE); while(::WaitForSingleObject (data.evWork ,INFINITE)==WAIT_OBJECT_0)//有客户请求
{
if(WSAEnumNetworkEvents(data.soWork,data.evWork ,&networkEvent)!=0)//失败
{
::closesocket (data.soWork );
goto nextIncome;
}
switch(networkEvent.lNetworkEvents)
{
case FD_CLOSE:
::closesocket (data.soWork );
goto nextIncome;
break;
case FD_READ:
RecvREQ(&receivedReqType);
switch(receivedReqType)
{
case REQ_LOGIN:
OnLogin();
break;
case REQ_ADD_PERSON:
OnAddPerson();
closesocket(data.soWork );
goto nextIncome;
break;
case REQ_ALT_PERSON:
OnAltPerson();
closesocket(data.soWork );
goto nextIncome;
break;
case REQ_DEL_PERSON:
OnDelPerson();
closesocket(data.soWork );
goto nextIncome;
break;
case REQ_ADD_IMAGE:
OnAddImage();
closesocket(data.soWork );
goto nextIncome;
break;
case REQ_DEL_IMAGE:
OnDelImage();
closesocket(data.soWork );
goto nextIncome;
break;
default:
closesocket(data.soWork );
break;
}//switch
}//switch
}//while
}
return 0;
}
{
// TODO: 在此添加专用代码和/或调用基类
MSG msg;
while(::GetMessage (&msg,0,0,0))//我自己来维护消息循环
{
switch(msg.message )
{
case MM_ADD_PERSON:
this->OnAddPerson(msg.wParam,msg.lParam );
break;
case MM_ALT_PERSON:
OnAltPerson(msg.wParam,msg.lParam );
break;
case MM_DEL_PERSON:
OnDelPerson(msg.wParam,msg.lParam );
break;
case MM_ADD_IMAGE:
OnAddImage(msg.wParam,msg.lParam );
break;
case MM_DEL_IMAGE:
OnDelImage(msg.wParam,msg.lParam );
break;
case MM_RECOGN_IMAGE:
OnRecognImage(msg.wParam,msg.lParam );
break;
case MM_LOGIN:
OnLogin(msg.wParam,msg.lParam );
break;
default:
break;
}
::TranslateMessage (&msg);
::DispatchMessage (&msg);
}
return 0;//CWinApp::Run();
}
是不是我用GetMessage (&msg,0,0,0),取消息后得到msg.message = WM_TEST, msg.wParam = len,
msg.lParam = pIorb->pData???typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;