[Gtk-sharp-list] Gtk# and threading, crash of the dll.

Felipe Almeida Lessa felipe.lessa at gmail.com
Fri Dec 16 13:45:36 EST 2005


2005/12/16, Gennadiy Donchyts <don at env.com.ua>:
>
> Hi all,
>

Hey!

as I know Gtk# is not thread-safe (is it planned to be?).
>

As far as I know, no. This is going to add great overhead and there
Application.Invoke() is easy enough to use that I can't even call it a
workaround (maybe "design decision" =) ).

I guess it is the reason of my errors,
> I have an application (1) which starts a separate thread (2) when some
> task starts and that task makes calls
> to custom dll using pinvoke. Is it safe to attach to events of (2) in (1)
> and to send results to some Widget when
> they are invoked?
>

No. Do some kind of "shielding" that uses Application.Invoke. For example,
instead of:

Thread1.SomeEvent += Thread2.SomeCallback;

Try:

Thread1.SomeEvent += delegate (Object myarg) {
        Gtk.Application.Invoke(delegate {
                Thread2.SomeCallback(myarg);
        });
};

You could even create a shielding function, like:
public MyDelegate ApplicationInvoke(MyDelegate callback) {
        return delegate (Object myarg) {
                Gtk.Application.Invoke(delegate {
                        Thread2.SomeCallback(myarg);
                 });
         };
}

And use like:
Thread1.SomeEvent += ApplicationInvoke(Thread2.SomeCallback);


Another thing is a little bit offtop but ... when I kill a child thread with
> Thread.Abort() the next time I start it
> it can't make calls to the underlying C++ dll anymore :((, probably
> someone experienced this kind of problem?
>

Try Thread.Interrupt(); or use something to stop inside of your code
(better), i.e.:

public void ThisFunctionIsExecutedOnAnotherThread() {
        stop = false;
        while (!stop) {
                DoSomething();
        }
}

public void Stop() {
        stop = true;
}

I also saw some attrbutes which can make my calls to the dll library more
> safe (in case they damage some memory)?
> Because when I exit my application I usually get something like Debug
> Error: DAMAGE: before Normal block (#-134134241) at 0x054532344
>

Well... this I don't know =D!

Thanks in advance,
>

You're welcome!

--Gena
>

Cheers,
Felipe.

--
"Quem excele em empregar a força militar subjulga os exércitos dos outros
povos sem travar batalha, toma cidades fortificadas dos outros povos sem as
atacar e destrói os estados dos outros povos sem lutas prolongadas. Deve
lutar sob o Céu com o propósito primordial da 'preservação'. Desse modo suas
armas não se embotarão, e os ganhos poderão ser preservados. Essa é a
estratégia para planejar ofensivas."

  -- Sun Tzu, em "A arte da guerra"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/gtk-sharp-list/attachments/20051216/e4efd16c/attachment.html


More information about the Gtk-sharp-list mailing list