免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1673 | 回复: 1
打印 上一主题 下一主题

linux中关于线程终止的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-30 16:17 |只看该作者 |倒序浏览
本帖最后由 caffee_1989 于 2011-05-30 16:19 编辑

我想在主程序中退出时把线程也终止了,有什么办法?
线程中是读串口read(),不退出好像会造成堵塞。
代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <strings.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <pthread.h>
#include <signal.h>

#define BAUDRATE B115200            
#define MODEMDEVICE "/dev/ttySAC0"
#define _POSIX_SOURCE 1

#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE;
static int QUIT=FALSE;

void *myThread(void)
{
    int fd,res;
    struct termios oldtio,newtio;
    char buf[255];
    fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
    if (fd <0) {perror(MODEMDEVICE); exit(-1); }
    tcgetattr(fd,&oldtio);
    bzero(&newtio, sizeof(newtio));
    newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
    newtio.c_iflag = IGNPAR;
    newtio.c_oflag = 0;
    newtio.c_lflag = 0;

     newtio.c_cc[VTIME] = 0;   
    newtio.c_cc[VMIN] = 5;  

    tcflush(fd, TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);

    //pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
    //pthread_setcanceltype(PTHREAD_CANCEL_ASYCHRONOUS, NULL);


    while (STOP==FALSE)
    {   
        pthread_testcancel();
        res = read(fd,buf,255);
        pthread_testcancel();
        buf[res]=0;
        printf(":%s:%d\n", buf, res);
        if (buf[0]=='z') STOP=TRUE;
    }
     tcsetattr(fd,TCSANOW,&oldtio);
}

int main()
{
    int ret;
    pthread_t tid;
    ret = pthread_create(&tid, NULL, (void*)myThread, NULL);
    if (ret)
    {
        printf("pthread error!\n");
        return 1;
    }
    sleep(10);
}

论坛徽章:
0
2 [报告]
发表于 2011-05-30 16:41 |只看该作者
pthread_join
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP