c - 如何创建一个新线程以使 pcap_loop() 和 gtk_main() 兼容?

标签 c gtk multithreading pcap

这两个函数都是无限循环,

一旦在同一线程中调用,程序就会挂起。

gtk_main(); 
...
pcap_loop(adhandle, 0, packet_handler, NULL);

当我点击“开始”按钮时,我希望pcap开始工作;如果我按下“停止”按钮,pcap > 停止

如何创建子线程并运行 pcap_loop(adhandle, 0, packet_handler, NULL);

最佳答案

除非我遗漏了什么,否则你的问题是 GTK+ 和 libpcap 是围绕主循环触发的事件进行组织的。没有 翻阅文档,我不知道 GTK+,但是有 是 libpcap 的另一种操作模式:您可以使用 pcap_next() 或 pcap_next_ex() 而不放弃对程序流程的控制。

应该可以注册一个定期调用的函数 这两个函数之一使用 g_timeout_add()g_idle_add(), 无需搞乱线程和互斥机制 总共。

关于c - 如何创建一个新线程以使 pcap_loop() 和 gtk_main() 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793293/

相关文章:

linux - gtk-listbox - 内容显示在水平线的中间,列表框不适合窗口大小

python - 将 GTK3+ 与 py2exe 捆绑在一起

gtksourceview 中的代码折叠

c++ - 尝试 std::lock[_unique] std::shared_mutex 的线程是否会被调用 std::lock_shared 的线程饿死?

c# - C# 静态构造函数线程安全吗?

c - 如何在 Linux 中使用 C 中的多个管道运行命令?

c - 以不区分大小写的方式计算字符在文件中出现的次数时出错

c - 需要帮助通过 C 管道使用 gnuplot 绘制最简单的 x,y 图

c - argv[argc] 是否等于 NULL 指针

c# - 在 .NET 中使用 volatile 进行线程间的单向通信