VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 548|回复: 1

VC++打造局域网聊天室-[9]程序关闭及线程的结束

[复制链接]
01_avatar_middle
online_admins admin 发表于 2017-12-25 23:32:27 | 显示全部楼层 |阅读模式
/********************** 上节补充 ***********************/
发送消息按钮的响应函数补充!
/************************** End ***************************/

1、线程的结束:
a、TerminateThread //强制结束某一线程;
b、ExitThread //线程自己强制退出;
c、线程函数返回-->最好的方法,申请的资源都能得到释放。

使用前两种方法时,线程的一些资源得不到释放,虽然进程结束时所有的资源都会被系统所回收,但是不是一个好的编程习惯!强烈建议大家使用第3种方法。

2、客户端与服务端结束函数的封装:
void CChatRoomDlg::StopClient()
{
        bShutDown = TRUE;
        DWORD dwRet = WaitForSingleObject(m_hConnectThred, 1000);
        if ( dwRet != WAIT_OBJECT_0 ) {
                TerminateThread(m_hConnectThred, -1);
                closesocket(m_ConnectSock);
        }
        m_hConnectThred = NULL;
        m_ConnectSock = INVALID_SOCKET;
        m_bIsServer = -1;
        bShutDown = FALSE;
}

void CChatRoomDlg::StopServer()
{
        UINT nCount = m_ClientArray.GetCount();
        HANDLE *m_pHandles = new HANDLE[nCount+1];
        m_pHandles[0] = m_hListenThread;
        for( int idx = 0; idx < nCount; idx++ ) {
                m_pHandles[idx+1] = m_ClientArray.GetAt(idx).hThread;
        }
        bShutDown = TRUE;
        DWORD dwRet = WaitForMultipleObjects(nCount+1, m_pHandles, TRUE, 1000);
        if ( dwRet != WAIT_OBJECT_0 ) {
                for( INT_PTR i = 0; i < m_ClientArray.GetCount(); i++ ) {
                        TerminateThread(m_ClientArray.GetAt(i).hThread, -1);
                        closesocket(m_ClientArray.GetAt(i).m_Socket);
                }
                TerminateThread(m_hListenThread, -1);
                closesocket(m_ListenSock);
        }
        delete [] m_pHandles;
        m_hListenThread = NULL;
        m_ListenSock = INVALID_SOCKET;
        m_bIsServer = -1;
        bShutDown = FALSE;
}

3、停止服务端/客户端按钮的响应:
4、身份状态的切换:
5、关闭对话框按钮的响应:

备注:本聊天室程序程序还支持 “任务栏托盘” 功能,那么下节课带领大家实现这个功能。


本套教程由VC驿站原创,完全免费!
相关课程演示细节还请观看视频教程!
教程下载地址:https://www.cctry.com/thread-6-1-1.html







上一篇:VC++打造局域网聊天室-[8]客户端编程及数据发送
下一篇:VC++打造局域网聊天室-[10]任务栏托盘功能的实现

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

75_avatar_middle
在线会员 besteast 发表于 2018-1-27 15:34:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-11 05:03

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表