[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 を組み合わせて
> 実現した経験もあります。

この市田さんの経験等の場合もあるということでしょうか?

期待通りの動作をしているので、満足しているのですが...
理解が足りないので、ご教示いただけないでしょうか?





In This Thread

Prev Next