- 论坛徽章:
- 0
|
我有一个接收/处理线程,其中有一个处理结果链表。当特定的情况下(达到规定时间,或者处理结果链表超过规定的数量),我要把处理结果写入数据库。为了不耽误接收线程的工作,入库必须要用一个新的线程!
因为我接触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();之后程序自动退出。
我的问题是这个独立的线程,会自行销毁吗?另外我对线程的这种方法对吗? |
|