[Kde-perl] QThread anyone?
Germain Garand
germain at ebooksfrance.org
Fri May 16 23:34:35 CEST 2003
Le Dimanche 11 Mai 2003 21:08, Ashley Winters a écrit :
> --- Germain Garand <germain at ebooksfrance.org> wrote:
> > That's not possible now though, since PerlQt isn't thread safe at
> > all.
> > I'll dig into that for the next release, it looks interesting.
>
> Ugh. Yes, PerlQt is not thread-safe. In order to acheive thread-safety,
> we can't keep any Perl SV* type variables in a global C variable.
>
Oh, OK, now I understand why I had all those funny "attempt to free
non-existing shared string" errors in the global object hash :-]
> When a Perl thread is spawned, it clones all the variables into
> separate interpreters, and performs draconian global interpreter
> locking upon accessing anything shared between threads. Therefore, any
> Perl variables PerlQt uses would have to be stored within the Perl
> interpreter, and retrieved from Perl-space when used.
In my last attempt I had it barely working (with the above errors reports) by
just locking the XS autoload. I believe just moving the object hash into Perl
space and a few more locks would be enough.
Sure, locking autoload is quite a "critical path", but anyway, I'd think the
main use would be to fire several ithreads doing non-qt things, which would
communicate with the main GUI thread via message passing, so that's not a big
deal...
I've been busy coding the PerlQt plugin for the Designer (mainly fighting to
death with buggy half-baked interfaces no body seems to have ever used nor
tested yet), so I didn't have time to test that.
>
> The better answer is: use Qt thread-safe datastructures everywhere!
> Yay!
>
> Does a QThread have to be created before the Qt datastructures start
> locking themselves?
>
I don't think so. It looks totally independent.
From the documentation, when thread support is enabled, a few methods are
reentrant or threadsafe (like qApp()->postEvent() ).
<quote>
Calling a thread-safe function simultaneously with the same data is safe,
since all access to the shared data are serialized.
</quote>
One can also explicitly lock the global qApp() mutex to perform simple GUI
operations across threads.
But I know very little about threads.
Germain
P.S: I just checked your GCC::TranslationUnit.
It's always a great experience to read good code, but when it's even
*thoroughly commented* good code, it's just bliss!
I tried to XMLout(
GCC::TranslationUnit::Parser->parsefile("foo.tu")->root->xml )
and was ... awed 8)
> Ashley Winters
>
> __________________________________
> Do you Yahoo!?
> The New Yahoo! Search - Faster. Easier. Bingo.
> http://search.yahoo.com
> _______________________________________________
> Kde-perl mailing list
> Kde-perl at mail.kde.org
> http://mail.kde.org/mailman/listinfo/kde-perl
More information about the Kde-perl
mailing list