Chinaunix

标题: 请教一个detach线程的问题 [打印本页]

作者: s5un    时间: 2004-08-17 19:44
标题: 请教一个detach线程的问题
我有一个接收/处理线程,其中有一个处理结果链表。当特定的情况下(达到规定时间,或者处理结果链表超过规定的数量),我要把处理结果写入数据库。为了不耽误接收线程的工作,入库必须要用一个新的线程!
因为我接触Unix不久,对它的线程认识不多,下面是部分的源代码,
*** 调用 ***
。。。。。。
for( ; ; ) {
    。。。。。。
    FD_ZERO(&readfds);
    FD_SET(sock,&readfds);
    FD_ZERO(&errfds);
    FD_SET(sock,&errfds);

    if(select(sock+1, &readfds, NULL, &errfds, &tv))        {
        if(FD_ISSET(sock, &readfds)) {
            memset(buf,0,204;
            if((len = recvfrom(sock,buf,2048,0,(struct sockaddr *)&from,&fromlen)) != -1) {
            。。。。。。
            pWritedb = new CWritedb();
            pWritedb->;SetNfMonitor(&WriteMonitorList);
            int t = pWritedb->;run();
    。。。。。。

*** 实现 ***
pthread_t CWritedb::run() {
    pthread_create(&m_pthread_tid, NULL, action, this);       
    return m_pthread_tid;
}

void * CWritedb::action(void  *arg) {
    cout<<"in CWritedb::action";
    CWritedb *pWritedb = (CWritedb *)arg;
    pthread_detach(pthread_self());
    。。。。。。

**********
程序需要入库线程是独立的,所以有pthread_detach()一行,程序中还有其他的线程操作,但不需要detach,所以工作的都还好。但是这个入库线程却工作的不行。在int t = pWritedb->;run();之后程序自动退出。
我的问题是这个独立的线程,会自行销毁吗?另外我对线程的这种方法对吗?
作者: s5un    时间: 2004-08-17 19:46
标题: 请教一个detach线程的问题
void CWritedb::SetNfMonitor(deque<Nf_Monitor>; *NfMonitorList) {
        m_NfMonitorList = NfMonitorList;
        m_writetype = 2;
}




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2