Ich habe ein GUI-Programm, mit dem ein Benutzer ein Netzwerk scannen kann, das Problem ist, dass, wenn die pcap_loop -Funktion aufgerufen wird, mein GUI-Programm nicht mehr reagiert (die pcap_loop blockiert den aktuellen Thread).Threading und pcap Probleme
Wenn ich versuche, pthreads zu verwenden, bekam ich einen SIGSEGV-Fehler an der pcap_loop-Funktion.Warum? Es ist, als ob der Thread die procPacket-Funktion selbst nicht sehen kann.
void procPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)
{
//show packets here
}
void* pcapLooper(void* param)
{
pcap_t* handler = (pcap_t*) param;
pcap_loop(handler, 900 ,procPacket, NULL);
}
//some function that runs when a button is pressed
//handler has been opened through pcap_open_live
pthread_t scanner;
int t = pthread_create(&scanner,NULL,&pcapLooper, &handler);
if(t)
{
std::cout << "failed" << std::endl;
}
pthread_join(scanner,NULL);
//do other stuff.