Re: [go-nuts] Is this a safe way to block main thread but not main goroutine?

2020-04-29 Thread Marcin Romaszewicz
As Thomas said, this will work for sure, though, and doesn't require any
manual setup, and you don't need to do funny business with CGO.

func main() {
  go doAllYourOtherStuff()
  blockOnDarwinEventLoop()
}

Done.


On Wed, Apr 29, 2020 at 1:44 PM Akhil Indurti  wrote:

> I want to mirror (or control) the event loop inside the main goroutine.
> The main goroutine should be the one to block for events. Plus, as long as
> it's safe, it doesn't seem needlessly complex to me.
>
> On Wednesday, April 29, 2020 at 4:38:27 PM UTC-4, Thomas Bushnell, BSG
> wrote:
>>
>> That seems needlessly complex. Why not just skip the weird init, and just
>> have main do a go to the thing you want to be not on the main thread, and
>> let the main thread do its thing?
>>
>> On Wed, Apr 29, 2020 at 4:19 PM Akhil Indurti  wrote:
>>
>>> I want to run the main goroutine on another thread besides the main
>>> thread, so that the main thread can block in darwin UI code. Is this a safe
>>> way to do it?
>>>
>>> package main
>>>
>>> /*
>>> #include 
>>> #include 
>>>
>>> void block() {
>>> printf("Blocking main thread? %d\n", pthread_main_np());
>>> while(1);
>>> }
>>> */
>>> import "C"
>>> import (
>>> "fmt"
>>> "runtime"
>>> )
>>>
>>> func init() {
>>> runtime.LockOSThread()
>>> go main()
>>> C.block()
>>> }
>>>
>>> func main() {
>>> fmt.Println("Blocking main goroutine?", C.pthread_main_np())
>>> }
>>>
>>>
>>> This prints out the following:
>>>
>>> $ go run threadtrick.go
>>> Blocking main thread? 1
>>> Blocking main goroutine? 0
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to golan...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/6b476ab1-c6b6-4f77-91d8-aba2dfbcc314%40googlegroups.com
>>> 
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/5e80ed26-09c5-4133-875e-4b0f72e9e2af%40googlegroups.com
> 
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CA%2Bv29LscLr34781JxeiTM%2B57Lx8U6Sj3Mr07V8pgfjx883%2B9dg%40mail.gmail.com.


Re: [go-nuts] Is this a safe way to block main thread but not main goroutine?

2020-04-29 Thread Akhil Indurti
I want to mirror (or control) the event loop inside the main goroutine. The 
main goroutine should be the one to block for events. Plus, as long as it's 
safe, it doesn't seem needlessly complex to me.

On Wednesday, April 29, 2020 at 4:38:27 PM UTC-4, Thomas Bushnell, BSG 
wrote:
>
> That seems needlessly complex. Why not just skip the weird init, and just 
> have main do a go to the thing you want to be not on the main thread, and 
> let the main thread do its thing?
>
> On Wed, Apr 29, 2020 at 4:19 PM Akhil Indurti  > wrote:
>
>> I want to run the main goroutine on another thread besides the main 
>> thread, so that the main thread can block in darwin UI code. Is this a safe 
>> way to do it?
>>
>> package main
>>
>> /*
>> #include 
>> #include 
>>
>> void block() {
>>  printf("Blocking main thread? %d\n", pthread_main_np());
>>  while(1);
>> }
>> */
>> import "C"
>> import (
>>  "fmt"
>>  "runtime"
>> )
>>
>> func init() {
>>  runtime.LockOSThread()
>>  go main()
>>  C.block()
>> }
>>
>> func main() {
>>  fmt.Println("Blocking main goroutine?", C.pthread_main_np())
>> }
>>
>>
>> This prints out the following:
>>
>> $ go run threadtrick.go
>> Blocking main thread? 1
>> Blocking main goroutine? 0
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golan...@googlegroups.com .
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/6b476ab1-c6b6-4f77-91d8-aba2dfbcc314%40googlegroups.com
>>  
>> 
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/5e80ed26-09c5-4133-875e-4b0f72e9e2af%40googlegroups.com.


Re: [go-nuts] Is this a safe way to block main thread but not main goroutine?

2020-04-29 Thread 'Thomas Bushnell, BSG' via golang-nuts
That seems needlessly complex. Why not just skip the weird init, and just
have main do a go to the thing you want to be not on the main thread, and
let the main thread do its thing?

On Wed, Apr 29, 2020 at 4:19 PM Akhil Indurti  wrote:

> I want to run the main goroutine on another thread besides the main
> thread, so that the main thread can block in darwin UI code. Is this a safe
> way to do it?
>
> package main
>
> /*
> #include 
> #include 
>
> void block() {
>   printf("Blocking main thread? %d\n", pthread_main_np());
>   while(1);
> }
> */
> import "C"
> import (
>   "fmt"
>   "runtime"
> )
>
> func init() {
>   runtime.LockOSThread()
>   go main()
>   C.block()
> }
>
> func main() {
>   fmt.Println("Blocking main goroutine?", C.pthread_main_np())
> }
>
>
> This prints out the following:
>
> $ go run threadtrick.go
> Blocking main thread? 1
> Blocking main goroutine? 0
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/6b476ab1-c6b6-4f77-91d8-aba2dfbcc314%40googlegroups.com
> 
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CA%2BYjuxuwEFCox%2B-dkYWL2oKsD%3D38OxRFNM%3DC%2B%2B7HHgGty2kGPw%40mail.gmail.com.


[go-nuts] Is this a safe way to block main thread but not main goroutine?

2020-04-29 Thread Akhil Indurti
I want to run the main goroutine on another thread besides the main thread, 
so that the main thread can block in darwin UI code. Is this a safe way to 
do it?

package main

/*
#include 
#include 

void block() {
printf("Blocking main thread? %d\n", pthread_main_np());
while(1);
}
*/
import "C"
import (
"fmt"
"runtime"
)

func init() {
runtime.LockOSThread()
go main()
C.block()
}

func main() {
fmt.Println("Blocking main goroutine?", C.pthread_main_np())
}


This prints out the following:

$ go run threadtrick.go
Blocking main thread? 1
Blocking main goroutine? 0

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/6b476ab1-c6b6-4f77-91d8-aba2dfbcc314%40googlegroups.com.