我在程序中建立了一个串口通讯的工作线程,它的功能就是始终不停的读写串口,我采用的是阻塞模式读写的。但是,当我要关闭主程序时,因为这个通讯线程是个死循环,所以我在主程序中无法关掉这个线程。我不知道该怎么办?
下面是该串口线程函数主体:
==================================================================== while(1)
{
……
阻塞写串口
阻塞读串口
……
}====================================================================当主程序结束时,我现在是用 TerminateThread 函数结束线程的,但是会弹出错误对话框。请问,做过多线程通讯的朋友,有没有比较好的方法,我也知道我用的这种方法不好!
主线程在需要退出的时候设置这个信号量,然后等待工作线程退出WaitForSingleObject(线程句柄)
{
……
阻塞写串口
阻塞读串口
……
}When You Terminate the thread , set BeRun = 0
都说是阻塞了,阻塞过程中肯定做不了什么事情的.
不过两次阻塞之间可以弄个标志退出进程
要不TerminateThread不行,就换TerminateProccess,线程改进程好了
BOOL g_bExit=FLASE;//全局变量,
while(1)
{
……
阻塞写串口
阻塞读串口
……
EnterCriticalSection(&g_secExit);
if(g_bExit)
{
return;
}
LeaveCriticalSection(&g_secExit);
}
//////////////////////////////////
主线程中操作g_bExit
EnterCriticalSection(&g_secExit);
g_bExit = TRUE;
LeaveCriticalSection(&g_secExit);
EnterCriticalSection(&g_secExit);
g_bExit = TRUE;
LeaveCriticalSection(&g_secExit);
这段代码后
最好再加上这个
WaitForSingleObject(子线程句柄),等待子线程结束
如果成功则安全结束子线程。