描述:
要怎样加才可以顺利触发连接点事件呢?我必须得用多线程的,而且这个控件
在Activx control Test Container中运行得很正常
如果在网页上,我不用多线程,也是可以很正常的触发事件的
我的代码如下:
STDMETHODIMP CRTX::connectToServer()
{
if(m_isConnect)
return S_FALSE;
sockaddr_in cli;
cli.sin_addr.s_addr=inet_addr("66.1.33.55");
cli.sin_family=AF_INET;
cli.sin_port=htons(9020);
//创建socket
m_clisock=socket(AF_INET,SOCK_STREAM,0);
if(connect(m_clisock,(sockaddr *)&cli,sizeof(cli)) )
{
return S_FALSE;
}
m_isConnect = true;
DWORD i = 1;
this->ListenMessage1((void *) this);
HANDLE hThread=CreateThread(NULL,0,&ListenMessage,this,0,&i) ;
return S_OK;
}
DWORD WINAPI ListenMessage(void *p)
{
CRTX* rtx = (CRTX *)p;
SOCKET clisock;
clisock= rtx->m_clisock;
CTransforProtocol protocol;
int a= 1;
while (true){
a = protocol.receive(clisock);
rtx->m_clRecvMess.setReceiveProtocol(protocol);
a = rtx->m_clRecvMess.receive(clisock);
// rtx->fire();
rtx->Fire_OnClose();
if(a < 0)
break;
}
rtx->m_isConnect = false;
if(a < 0)
rtx->Fire_OnClose();
return 1;
}
Fire_Onclose() 是用ATL向导生成的一个事件函数
麻烦那位大虾给解释一下,或者给出一个解决方案
我的目的就是在接收到服务器发过来的消息时马上通知网页,然后网页中的VBScript作相应的处理
解决方案1:
你用工作线程发消息给主线程(初始化控件的那个),让主线程去调用连接点代理函数(FIRE_ON*)试试.
解决方案2:create an invisible window
解决方案3:现成里加AFX_MANAGE_STATE(AfxGetStaticModuleState())