藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


在使用libpcap時,給循環創建多線程出現的問題

這是我在使用多線程的時候碰到的一個問題,請各位大蝦指點,謝謝。
線程的創建放在主函數里,語句為:
if(pthread_create(&thread_id,NULL,InterfaceThread,(void*)pd)>;0)
      {
       perror("pthread_create error");
       exit(3);
      }
      
而線程執行函數語句為:
void *InterfaceThread(void *pd)
{

    /*Loop read packets on the device.  */
    if(pcap_loop(pd,-1, PacketProcess, NULL) < 0)
    {

      fprintf(stderr,"pcap_loop:%s\n",pcap_geterr(pd));
           exit(1);

    }

  pcap_close(pd);

   pthread_exit(NULL);

}

其中pd的 定義為:pcap_t *pd;(為一個 文件描述符)
在 執行函數時,錯誤為:
pcap_loop:read: Bad file descriptor.

請問那麼要如何定義create的第四個參數呢,而要pd如何才能傳到interfaceThread函數呢?

在使用libpcap時,給循環創建多線程出現的問題

這種方式不會有問題。

你直接調用這個處理函數看看,報不報錯?

另外還有可能你的其它並發線程先關閉了這個pcap_t描述符。

在使用libpcap時,給循環創建多線程出現的問題

pthread_creat() 的第四個參數不就是個指針嘛,用來放線程函數的參數

在使用libpcap時,給循環創建多線程出現的問題

謝謝,可能是我的主線程關閉了pd描述符,我再試試看。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com