mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-06 16:40:32 +00:00
37 lines
543 B
Go
37 lines
543 B
Go
//go:build darwin
|
|
|
|
package goprovider
|
|
|
|
var mainThreadTasks chan func()
|
|
|
|
func RunMainThreadLoop(run func() int) int {
|
|
if mainThreadTasks != nil {
|
|
return run()
|
|
}
|
|
|
|
mainThreadTasks = make(chan func())
|
|
resultCh := make(chan int, 1)
|
|
|
|
go func() {
|
|
resultCh <- run()
|
|
}()
|
|
|
|
for {
|
|
select {
|
|
case task := <-mainThreadTasks:
|
|
task()
|
|
case code := <-resultCh:
|
|
mainThreadTasks = nil
|
|
return code
|
|
}
|
|
}
|
|
}
|
|
|
|
func postMainThreadTask(task func()) bool {
|
|
if mainThreadTasks == nil {
|
|
return false
|
|
}
|
|
mainThreadTasks <- task
|
|
return true
|
|
}
|