in reply to Re: XS: Passing an external library's function a Perl XS callback
in thread SOLVED: XS: Passing an external library's function a Perl XS callback
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; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: XS: Passing an external library's function a Perl XS callback
by BrowserUk (Patriarch) on Aug 15, 2016 at 21:04 UTC | |
by stevieb (Canon) on Aug 15, 2016 at 21:33 UTC | |
by Anonymous Monk on Aug 15, 2016 at 21:45 UTC | |
by syphilis (Archbishop) on Aug 16, 2016 at 00:10 UTC |