Essentially, an external program is handling the interrupts within threads... I just want to be able to have user-generated perl code executed when the interrupt is triggered.
I've found that the problem isn't necessarily with the wiringPi software. I've recreated the issue without external libraries. The problem seems to be with threads. The following works fine, until I uncomment the XS code within the wrapper() function...
use warnings; use strict; use Inline (C => 'DATA', libs => '-lpthread'); create_thread('blah'); sub blah { print "perl callback\n"; } __DATA__ __C__ #include <pthread.h> #include <stdio.h> #include <stdlib.h> void wrapper(void *sub_name_ptr){ char *sub_name = (char *)sub_name_ptr; printf("threaded ok, sub: %s\n", sub_name); /* dSP; PUSHMARK(SP); PUTBACK; call_pv(sub_name, G_DISCARD|G_NOARGS); FREETMPS; LEAVE; */ return NULL; } int create_thread(char *subname){ pthread_t sub_thread; if(pthread_create(&sub_thread, NULL, wrapper, subname)) { fprintf(stderr, "Error creating thread\n"); return 1; } if(pthread_join(sub_thread, NULL)) { fprintf(stderr, "Error joining thread\n"); return 2; } return 0; }
In reply to Re^2: XS: Passing an external library's function a Perl XS callback
by stevieb
in thread SOLVED: XS: Passing an external library's function a Perl XS callback
by stevieb
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |