Browse thread
Native multithreaded LablGTK2?
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Kaspar Rohrer <krohrer@s...> |
| Subject: | Re: [Caml-list] Native multithreaded LablGTK2? |
On 30.07.2007, at 13:57, Julien Moutinho wrote: > Oki douki, it's just that I did not undertand why you use std(in|out) > to communicate between threads... But you use them because you want > a buffering machinery and you have only looked at Pervasives, right? No, the problem is of a different nature: I want to capture standard output and display it in a (log) window in my Gtk application. I'm aware that I could just use custom output functions, but the main problem here is that I've embedded a Scheme interpreter (Ocs, actually: http://will.iki.fi/software/ocs/) which writes to stdout by default. Now, of course I could adapt Ocs to suit my needs. But I have no intention to do so at the moment (although it would be relatively straight forward by extending Ocs_port). >> I'm piping stdout, because that's the only way I was able to redirect >> stdout to a gtk text widget (using a GIOchannel: GMain.Io.*). If >> anybody >> has a better idea, I'd be glad to hear it. I was originally >> thinking of an >> out_channel that writes to a buffer instead of a file, but the Ocaml >> standard library seems to be missing this functionality. Or is it? > You have [Stream.t], [Buffer.t] and [GText.buffer] at your service. > > HTH. I actually already use a GText.buffer. In conjunction with piping and GMain.Io.add_watch, I am able to redirect standard output to the buffer and thus display it in a text widget. But this only works reliably if the application is multithreaded, because pipes have a fixed size buffer (something around 5000 bytes IIRC). Now, if the buffer was able to capture all output, this would work for a single thread also. Because writes to the buffer would never block, unlike writes to a pipe. I might be wrong on all of the above though, as I am far from an expert on either Gtk or multithreading. Anyway, thanks again. I really apreciate any help I can get.