That looks like a good start. So far I added (among others) the following lines to my program:
Genode::Entrypoint ep { env, 64*1024, "signal_ep" }; Genode::Signal_handler<MyClass> _status_handler(ep, *this, &MyClass::_handle_update); _status_ds.sigh(_status_handler); However, when the _status_ds ROM dataspace content changed (verified using verbose=yes in the report_rom), the function _handle_update is not invoked. I can see that the initial content of the dataspace at initialization time is correct. What else do I need to do for my Qt program to be able to receive signals? On 24-10-17 17:11, Johannes Kliemann wrote: > Hi Boris, > > I have a similar problem with running a Qt application from a second > thread. In my case it segfaulted after QApplication::app. > > Christian gave me a hint I wasn't able to try yet, but maybe it could > be helpful for you, too. > >> On Mon, Oct 16, 2017 at 01:42:04PM +0200, Johannes Kliemann wrote: >>> I tried to create a provide an input session from a libc (in this case >>> an Qt application). If I just run it from the Main struct it will >>> correctly announce the session but since Main never returns, no client >>> will be able to use it. >>> I tried to circumvent this by putting the application into a separate >>> thread but this led to the following error: >>> >>>> Error: void Libc::Kernel::run(Libc::Application_code&) called from >>>> non-kernel context >>> >>> Running this Qt application without wrapping it into with_libc makes it >>> segfault on initialization. >>> >>> What is the correct way to do this? My current main is at [1]. >> >> Unfortunately, there is no "correct" way of implementing tasks like >> the described currently. I must admit that with_libc() is the most >> confusing function in Genode currently and we therefore will remove it >> from the API soon. In fact, I myself did not expect that with_libc() >> is needed in your context but there may be dependencies unknown to me. >> >> I'd suggest a careful look into libports/src/app/avplay which provides >> an input session too. The approach there is to create a second Genode >> entrypoint for the input service and execute Qt code in the component >> thread. I strongly encourage you not just to copy the avplay code as >> it uses the older, low-level Rpc_entrypoint but use >> Genode::Entrypoint. > > Regards, > Johannes > > On 10/23/17 15:51, Boris Mulder wrote: >> Dear Genode folks, >> >> I have built an application with Qt5. I want it to also be able to read >> ROM modules from a report_rom server and to be able to handle updates to >> that ROM using signals. >> >> When I run QApplication::exec() however, it does not return and the >> entrypoint cannot listen to signals, causing them to be ignored. >> >> So I created another QThread and run my QApplication in there. Now I get >> the following error: >> >> WARNING: QApplication was not created in the main() thread. >> >> And the application does not do anything and does not react to events. >> >> What can I do to be able to run both the qt event loop and the genode >> event loop? >> >> >> regards, >> >> Boris >> > > ------------------------------------------------------------------------------ > > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > genode-main mailing list > genode-main@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/genode-main -- Met vriendelijke groet / kind regards, Boris Mulder Cyber Security Labs B.V. | Gooimeer 6-31 | 1411 DD Naarden | The Netherlands +31 35 631 3253 (office) ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main