On Wed, 18 Jan 2012 18:36:21 +0900 Carsten Haitzler (The Rasterman) <ras...@rasterman.com> wrote:
> get onto irc and i'll explain... i feel i'm repeating myself. After repeating ourselves on IRC once more, we came up with a workable plan that might make everyone happy. First step is to write edje functions for generically bundling up one or more Lua tables into a message, sending that message, then unpacking it again. This will be able to be done from edje, from C, and from Lua directly. Perhaps adding that as one more edje messege type. This is for sending Lua tables between threads. A later addition will be to send them through the 'net, probably as eet. Host apps can register arbitrary functions with edje Lua, using a more generic version of the code I already wrote for letting edje register lua functions. These host functions are by default not thread safe. Edje puts a wrapper function around the host app, and registers that wrapper function with Lua. The wrapper function, when called from Lua, does this - ecore_thread_main_loop_begin(); call the host app callback(); ecore_thread_main_loop_end(); The first alternative, which the host app must request, is for the wrapper function to use the table message functions to marshal the arguments, send it to the main thread, wait for the response (or do something else), then unmarshal the result before sending it back to Lua. The second alternative, which the host app must REALLY request, is for the host app to say "I'm REALLY going out of my way to be threadsafe, just call me direct". No edje wrapper function, BUT the host app still has to use edje to register this function. The first two might be done this way - host_cb = edje_lua2_functions_add(...); edje_lua2_function_marshal_set(host_cb, function); The last one could be - host_cb = edje_lua2_threadsafe_function_add(...); Note the difference between _functions_ and _function_. The first call registers an entire metatable full of functions, in the same way that edje does for it's functions. These are the default sort of functions. The second call references one of those previously registered functions, and makes it marshal arguments and results. The third one registers a single function, but it could be added to an existing metatable registered by the first function. Comments? BTW, since in my current project I'll be writing code to use luaproc for threading thousands of Lua scripts using worker threads and a queue, I can probably incorporate that into edje Lua to begin with. -- A big old stinking pile of genius that no one wants coz there are too many silver coated monkeys in the world.
signature.asc
Description: PGP signature
------------------------------------------------------------------------------ Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel