前提・実現したいこと
情報を読み込んでいることを表示する画面を作成したいです。
使用言語はgolangでGUIを表示するライブラリはwalkを使用しています。
GoでGUIを表示する
試したこと
まず初めに、ロード画面のGUIを表示する
showWindow()
という関数を作成しました。
これはプログレスバーを表示するだけの簡単なものになっています。
次に、コンピュータの情報を取得する
getInfo()
という関数を作成しました。
これら2つはそれぞれ期待通りに動作するのを確認できています。
最後に、情報を読み込んでいる間はロード画面を表示する、ということがしたかったので
Goで並列処理
を参考に以下のコードを作成しました。
import ( "log" "time" "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) func main() { isFin1 := make(chan bool) isFin2 := make(chan bool) fmt.Println("Start!") go func() { // ロード画面を表示する showWindow() isFin1 <- true }() go func() { // PCの情報を取得する getInfo() isFin2 <- true }() // 情報を取得するのを待つ <-isFin1 <-isFin2 fmt.Println("PC情報の取得に成功しました。") } // 受け渡し用構造体 type MyLoadWindow struct { *walk.MainWindow progressBar *walk.ProgressBar } func showWindow() { mw := &MyLoadWindow{} // 画面サイズ取得 sizeX := 300 sizeY := 100 // 画面情報設定 MW := MainWindow{ AssignTo: &mw.MainWindow, Title: "待機中", Size: Size{ sizeX, sizeY}, Font: Font{PointSize: 12}, Layout: VBox{}, Children: []Widget{ ProgressBar{ AssignTo: &mw.progressBar, MarqueeMode: true, }, }, } if _, err := MW.Run(); err != nil { return } } func getInfo() { fmt.Println("get Info") }
発生している問題・エラーメッセージ
上記のコードを実行すると
PC情報の取得関数は動作しているが、ロード画面が表示されない ように見えるという問題が発生しました。
デバッガで実行するとshowWindow()のところも通っているように見えるのですが
単体で実行したときに表示されたプログレスバーは表示されませんでした。
並列処理というものを初めてしたのできっとそこに問題があると思うのですが
どなたか何が悪いかわかる方がいたら教えていただけないでしょうか。
※追記
よく考えてみれば<-isFin2になったらshowWindow()を終了するのような処理にするべきなのかなと思いましたが
そこをどのように実現すればいいのかが思いつかなかったです…
補足情報(FW/ツールのバージョンなど)
Windows
Golang
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/08 01:35
2018/11/09 05:26
2018/11/09 05:40
2018/11/12 04:59
2018/11/12 05:03
2018/11/13 01:14