[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] experience with SDL2, event loop & main thread
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] experience with SDL2, event loop & main thread |
Date: |
Tue, 13 Dec 2016 15:04:53 +0800 |
User-agent: |
Mutt/1.7.1 (2016-10-04) |
On Mon, 12/12 17:07, Liviu Ionescu wrote:
>
> > On 12 Dec 2016, at 16:51, Fam Zheng <address@hidden> wrote:
> >
> > On Mon, 12/12 15:22, Liviu Ionescu wrote:
> >> so, back to square one; any suggestion on how to avoid the periodic timer
> >> required to poll SDL system events?
> >
> > Good question, I've missed that!
> >
> > Sadly I don't find it possible. The main thread of QEMU has to run the glib
> > event loop so it cannot block on SDL_WaitEvent().
>
> why should the glib event loop run as the main thread? according to my tests,
> on linux and macos the glib event loop can run very well on a regular thread.
According to the API documentation I think it is supposed to work, but it will
be an unusual use case anyway so it's presumably less tested and I remember
hearing about things break here and there (cannot recall any detail :().
>
> the problem that I encountered with this approach was on windows, where there
> is no `poll()`, and the existing implementation of it in qemu does not work if
> moved on a different thread. I do not know if the qemu implementation is not
> correct, or the win32 api does not allow this.
>
> > ... it cannot block on SDL_WaitEvent().
>
> initially I considered that rearranging threads to free the main thread for a
> dedicated SDL loop that blocks on SDL_WaitEvent() is a good solution, but then
> I took a look at how SDL_WaitEvent() is implemented: a loop that sleeps 10 ms
> and checks if there are events in the queue. :-(
>
> so the best solution would be to make SDL asynchronous and run it on the glib
> event loop.
Maybe, but that would be a big project.
Given how SDL_WaitEvent() works as you said above, the easies solution would be
using qemu_bh_schedule_idle in the QEMU main loop and poll event there
periodically.
Fam
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, (continued)
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Liviu Ionescu, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Fam Zheng, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Liviu Ionescu, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Fam Zheng, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Daniel P. Berrange, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Liviu Ionescu, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Fam Zheng, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Liviu Ionescu, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Fam Zheng, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Liviu Ionescu, 2016/12/12
- Re: [Qemu-devel] experience with SDL2, event loop & main thread,
Fam Zheng <=
- Re: [Qemu-devel] experience with SDL2, event loop & main thread, Liviu Ionescu, 2016/12/13