2

我正在Linux使用 Qt 库编写一个应用程序。

所以,有两个QThreads。在其中一个线程pcap_next()函数中while循环调用。所有线程在其工作期间经常使用彼此的公共成员。

不使用pcap库(例如从硬盘读取数据包)一切都是正确的,但是当我尝试将 pcap 的功能放入单独的thread时,我有 SEGFAULT 错误。

我无法理解如何pcap工作。它看起来像pcap冻结了整个过程,因此线程无法访问彼此的公共成员。

run()pcap的线程的主要功能是这样的:

while()
{
   Data = pcap_next(handle, &header);
   if (Data...)
   {
        //processing functions
   }
}

有任何想法吗?

4

1 回答 1

2

“冻结整个进程”会使其他线程无法运行;它不会导致进程崩溃。

pcap_t如果您的程序在多个线程中同时调用一个线程,而不是一些安全调用,例如pcap_breakloop()(这不会中断被阻塞的线程 - 您需要在 UN*X 中传递一个信号来执行此操作),那里不能保证它会起作用。

pcap_t如果您从不在不同线程中同时对同一 pcap 进行调用,它应该可以工作。

pcap_t即,您可以在一个线程中打开设备/保存文件,获取一个pcap_t. 但是,您不能让多个线程从pcap_t.

但是,您使用 pcap 的方式可能有问题,即使在单线程程序中也会崩溃。我们必须查看您所有的 pcap 调用,看看是否是这种情况。

于 2013-01-10T05:21:05.883 回答