Yeah, I actually used wrong wording I guess - I meant subroutine :)
This naming difference may be exactly what You asked for. As I believe do yield() would become true coroutine if this one line went :
var x = do_yield()
This way ready() would actually have to wait until yield line of do yield() until x would become yieldedfunctionstate. You can also go :
yield(self,"do_yield","completed")
to force ready() to wait until do_yield() gets to its return line
To be honest I don't understand swapping yielded function states inbetween corroutines, these are some advanced options for me
I tried experimenting with it earlier but it beat me :)
Maybe You can get to something ? :)
PS I don't understand what You meant about signals and connect relative to threads. I fail to see simarity between those methods.