Skip to content

Instantly share code, notes, and snippets.

@slimsag
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slimsag/0b7c40e8fb6b566e491f to your computer and use it in GitHub Desktop.
Save slimsag/0b7c40e8fb6b566e491f to your computer and use it in GitHub Desktop.
(gopherjs) Channel Based Main Thread Ownership
package main
import (
"fmt"
"github.com/gopherjs/gopherjs/js"
)
var MainLoopChan = make(chan func(), 1)
type Window struct{}
func (w *Window) renderFrame(args ...interface{}) {
go func() {
fmt.Println("renderFrame()")
MainLoopChan <- func() {
fmt.Println("glFooBar()...")
js.Global.Call("requestAnimationFrame", w.renderFrame)
}
}()
}
func NewWindow() *Window {
w := &Window{}
// Window creation.
js.Global.Call("requestAnimationFrame", w.renderFrame)
return w
}
func main() {
NewWindow()
// Main loop.
for {
fmt.Println("main loop: waiting for func")
select {
case f := <-MainLoopChan:
fmt.Println("main loop: exec func")
//gopherjs:blocking
f()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment