John Labenski a écrit :
> I think that all you need to do is to shuffle around your existing 
> code to pull out the dialog creation from the coroutine code, I also 
> demonstrate how to pass data around without using globals.
Yes, this is a solution, but I would like to avoid it if possible. My 
idea is to use coroutines to have a flexible system that would allow 
sequential programming to perform tasks even when these tasks require 
user action, or waiting for anything without blocking the application. 
The promptUser function is only an example. I'd like to be able to write 
things like:

local filename = openFileDialog()
if filename ~= nil then
    if string.sub( filename, -10 ) == ".something" then
        local choice = promptUser( "Are you sure?" )
        if choice then
           -- do something with filename
        end
    else
        -- do something else with filename
    end
end

And this piece of code could happen to be deap inside a coroutine 
callstack, so the main thread that started it do not know it needed to 
create dialogs and connect events before starting the coroutine.
> Alternatively, you can do exactly what you had before and simply 
> connect to the button after you create the dialog in the coroutine. 
> wxWidgets doesn't care or know what coroutine you're in since they're 
> all in the same C thread.
I don't understand what you mean here. I think it is exactly what I've 
done in my first example, but it doesn't work, because after connecting 
my callback on the button, I yield, and the callback is executed in the 
coroutine stack (which is the part I didn't understand in my first 
e-mail), so the callback registered from the coroutine can not resume 
the same coroutine.
>
> Or, you can use the code you originally had, but use wxPostEvent(...) 
> to send your own event from the Lua coroutine back to a function 
> created and connected in the main thread.
If I understand correctly, this would allow me to execute code in the 
main thread from my coroutine ? I will look further into this, it could 
solve my problem.
>
> Finally, if all you're doing is trying to create dialogs to get user 
> input you wouldn't bother with coroutines since wxWidgets has an event 
> loop. The only use of a coroutine would be for some long calculation, 
> but again this is usually performed with idle events (wxEVT_IDLE) to 
> allow the GUI to refresh.
I don't want to use coroutines to execute things in parallel, but only 
to have nice and easily readable code as the example at the beginning of 
this e-mail.
>  
> You can create dozens and dozens of GUI elements with no noticeable 
> lag. You may notice that on a very slow machine the controls.wx.lua 
> may be slow to start, but that is because we are connecting to every 
> imagineable event for every control created. It is not a realistic 
> benchmark.
Ok :-)
> Regards,
>     John
>
Thanks again for the answers. I think now I have enough solutions to 
pick one that suit my needs in my real application :-)


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
_______________________________________________
wxlua-users mailing list
wxlua-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wxlua-users

Reply via email to