本人最近在尝试写个及时通讯,
这个是关闭程序:
期望在关闭的同时,发送一个离线消息到服务器上。
void CClientDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
KillTimer(1);
closesocket(SocketOnLine);
AfxBeginThread(ClientDown,this,THREAD_PRIORITY_NORMAL,0,0,NULL); // 打开一个线程,发送离线消息、
CDialog::OnClose();
}
本人想知道,在线程还在运行的时候,
1、主对话框关闭了,那么线程是否继续运行。
2、如果线程还在运行,会受到哪些影响。本人在实际调试中发现,线程仿佛随着对话框的关闭也同时关闭了。
这个是关闭程序:
期望在关闭的同时,发送一个离线消息到服务器上。
void CClientDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
KillTimer(1);
closesocket(SocketOnLine);
AfxBeginThread(ClientDown,this,THREAD_PRIORITY_NORMAL,0,0,NULL); // 打开一个线程,发送离线消息、
CDialog::OnClose();
}
本人想知道,在线程还在运行的时候,
1、主对话框关闭了,那么线程是否继续运行。
2、如果线程还在运行,会受到哪些影响。本人在实际调试中发现,线程仿佛随着对话框的关闭也同时关闭了。
不用发线程,直接PostMessage
我期望达到发送一个给服务器发送消息的目的。
(本人系菜鸟,很菜很菜那种,只是有兴趣,就搞搞玩那种,很多不懂)
{
int ret;
unsigned long flag = 1;
unsigned long unflag = 0; sockaddr_in ServerAddr;
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.S_un.S_addr = inet_addr("192.168.0.203");
ServerAddr.sin_port = htons(3247);
SocketDown = socket(AF_INET,SOCK_STREAM,0);
if (SocketDown == INVALID_SOCKET)
{
return 0;
} ret = ioctlsocket(SocketDown,FIONBIO,(unsigned long*)&flag);
if (ret == SOCKET_ERROR)
{
return 0;
} ret = connect(SocketDown,(LPSOCKADDR)&ServerAddr,sizeof(ServerAddr));
if (ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK)
{
return 0;
} FD_SET fdread; ////////// 监视集合设定
FD_ZERO( &fdread );
FD_SET(SocketOnLine, &fdread);
timeval tv; ////////// 超时 设定
tv.tv_sec = 3;
tv.tv_usec = 0;
select(0,0,&fdread,0,&tv);
if (FD_ISSET(SocketDown,&fdread))
{
ret = ioctlsocket(SocketDown,FIONBIO,(unsigned long*)&unflag);
if (ret == SOCKET_ERROR)
{
return 0;
}
ret = send(SocketDown,"",1,0);
if (ret == SOCKET_ERROR)
{
return 0;
}
}
else
{
return 0;
} closesocket(SocketDown);
return 1;
}
线程在3秒内还没有连接,会自动返回终止。
不知实际运用这样是否会带来问题。
因为我考虑到socket通讯方面如果没有和对方连接上,
可能会出现等待连接的几秒钟,我设定的3秒。如果是不用线程,在Dialog里面,
我担心出现这几秒钟Dailog无法工作,卡死的情况。
恩,你这个办法不错的。我之前也想过。
我也想问问,如果依然用TCP/IP,应该还是用线程最好吧?继续提我之前的两个问题,我期望搞清楚流程。在线程还在运行的时候,
1、主对话框关闭了,那么线程是否继续运行。
2、如果线程还在运行,会受到哪些影响。 本人在实际调试中发现,线程仿佛随着对话框的关闭也同时关闭了。