小弟最近实现了一个 组件
该组件里跑着一个线程,以及存在一个命令队列而这个线程用来等待执行命令队列中的各种动作
我是这样设计的CString CmdList[10];//保存了各种命令
HANDLE CmdListEvent[10];//对应于命令列表,用CreateEvent来创建这个10个事件对象然后我在线程中
用WaitForMultipleObjects来等待CmdListEvent这10个事件对象,只等一个就返回
如果等到了这个事件对象以后,再获取这个事件对象的下标,然后读取对应的CmdList
并执行相应的操作在外部调用这个组件的时候 只要设置CMDLIST后在激活对应下标的CmdListEvent的事件对象
就可以让线程工作了这个实现思路我觉得没有问题,工作也正常,但是我发现有时候程序退出的时候会卡死不知道是为什么
我是这样让线程安全退出的
===========退出部分代码============
PublicModule.AXStatus =false;//设置这个全局变量为FALSE后 线程会每次判断,如果为FLASE线程退出
DWORD WaitResult;

if (PublicModule.FTPCmdThreadHandle!=NULL)
{
do
{
::SetEvent(PublicModule.CmdListEvent[0]);//设置为有信号让线程退出,
                //(这里随便找了一个事件对象,激活他以便线程能继续工作)
WaitResult=::WaitForSingleObject(PublicModule.FTPCmdThreadHandle,100);
}while(WaitResult!=WAIT_OBJECT_0&&WaitResult!=WAIT_FAILED);
::CloseHandle(PublicModule.FTPCmdThreadHandle);
}
==========线程中退出部分代码================
while(PublicModule.AXStatus==true)//只有在打开时工作
{
WaitResult=::WaitForMultipleObjects(MAXCMDLIST,PublicModule.FTPCmdEvent,FALSE,INFINITE);
if (PublicModule.AXStatus==false) break;//说明是退出
        //走到这里不是强制退出 说明有命令需要处理}