[ruby-list:50602] Re: Fwd: Re: Re: [質問]thread内sleepコール 他threadよりsleep状態からrun状態にされた際、指定時間sleepさせるには?
From:
<yamataka@...08.itscom.net>
Date:
2017-10-11 06:27:45 UTC
List:
ruby-list #50602
> こんにちは、市田です。
市田さん
山口です。
いつもご教示ありがとうございます。
> # 個別でも返信していますが、ご容赦を>山口さん
いえいえ。全く気にしておりませんので...
むしろ、うれしいぐらいです。
> rubyらしいかどうかは別として、自分ならという点をいくつか。
...
> # 定義
> sd = {
> run: { pause: :exec_puase },
> pause: { run: :exec_run },
> }
>
> # 関数選択
> func = nil
> func = sd[ets][etc] if sd[ets]
>
> if func
> send(func)
> else
> exec_nil
> end
>
> として、ループは避けます。
> 状態遷移表は基本二次元配列になるので、それをHashで実現という形です。
実は、状態遷移表に従って、関数ポインタを用いて呼び出す。みたいなのを、
C言語を使っていた時に、よく用いていたのですが、そのようなやり方がよくわ
からなくて...
obj.send というのを用いれば、似たようなことができるのですね。
非常に勉強になります。
> ここは私なら
>
> ret = STDIN.gets.strip
>
> case ret
> when 'q'
> #
> when 'p'
> #
> end
>
> と書きますかね。
これ、市田さんのメールいただく前に、今日の朝、自分で対応しました。:-)
スペース削除する String method あるよなと思って、Web上の Ruby reference
で確認しました。
> あと、気になったのは exec_* を実行中、メインスレッドからの操作を行わな
い
> 点でしょうか。
"メインスレッドからの操作を行わない点" という部分に関して、
今私のスクリプトでは、input_thread が入力指示を受け持つようにしたのです
が...
main thread で行った方がよいという意味でしょうか?
> 作りの問題もあったのでしょうが、Tk で UIスレッドとメインスレッドを分離
> したかったのですがうまく行かず、結局 Winform と rubygem を組み合わせて
> 実現した経験もあります。
この市田さんの経験等の場合もあるということでしょうか?
期待通りの動作をしているので、満足しているのですが...
理解が足りないので、ご教示いただけないでしょうか?