MyHDLパッケージを使用してハードウェアシミュレーションを行っていますが、ユーザーがインタラクティブに信号を変更して他の信号の更新を確認できるようにGUIを配置します。シミュレーション(MyHDL)とwxPythonを一緒に使用する
問題が
- シミュレータは各ジェネレータはシミュレータを伝えるために、信号の変化、またはコール収率遅延(X)をリッスンすることができるいずれかのいくつかの発生
- を有しているが、以下のようにMyHDLシミュレータを使用し、ありますx tickの間それをもう一度呼び出すのを待つ。 wxPythonのは明らかにイベントループを使用しています
完了にシミュレーション
これは働いていたが、インスト()発電機は一度だけ実行しますので、シミュレーションは本当に何もしなかったが、次のように
私の最初の(ダム)メソッドでした。
次に、私はこれがマルチスレッドを要求する状況であることを認識しました。私は次のように試しました:
self._simulator = Simulation(*self._instances)
p = Process(target=StartSim, args=(self._simulator,))
p.start()
#self._simulator.run()
self._app.MainLoop()
p.join()
def StartSim(sim):
sim.run()
もちろん、私はスレッドの安全性について最初は考えていませんでした。また、シミュレータで持っているジェネレータ関数をすべてスレッドに渡すことはできません。
先ほど作成した堅固なスレッドワーカークラスで実際に作業していて、何らかのメッセージを渡して必要なジェネレータ関数を得ることができると思っています。しかし、wxPythonループの各ステップで "yield delay(1)"と呼ばれる何らかのジェネレータを定義できれば簡単だと思う。クラスのようなもの:
def OnIdle(self):
yield delay(10)
そして私の元の方法で行っています。問題は、私はこのようなものにするためのコードが必要にされています
def Hack():
@instance
def inst():
self._app.InitMainLoop()
while(self._app.InMainLoop())
yield delay(1)
self._app.DoMainLoopBody()
return inst
ので、その長いったらしい説明した後、これを行うには良い方法はありますか?私自身のMainLoopを定義したり、何らかの方法でそれを変更することはできますか?または、誰もMyHDLとスレッディングを使って作業していますか?