0

解決済み:ほとんどすべてのことを正しく行っていて、wxLua ライブラリが完全に機能していることがわかりました。問題は、デバッグでコンパイルされたライブラリをリリースで他のライブラリと混在させることでした。

メーリングリストのアーカイブ


私は wxLua を使用してインターフェイスを作成していますが、いくつかのクラッシュに直面しており、それらのソースを探した後、見つけることができました。私は標準の lua インタープリターをロードしていますが、C++ コードを wxLua にリンクしていません。標準の lua インタープリターを作成し、その中で require("wx") を実行して wx.dll をロードします。考えられる理由はわかっているので、これが既知の動作である場合に備えて質問します。最初のいくつかの質問?

  1. wxWidgets の最初のイベント (クリック、セルの変更、ツリー項目のアクティブ化など) は、同期または非同期でディスパッチされますか?

  2. 非同期の場合、to イベントが同じ lua 状態に対して同時にディスパッチャになる可能性はありますか?

私が持っているのは、いくつかのアイテムとグリッドを持つツリー コントロールです。そのため、ツリー内のアイテムがアクティブになると、グリッドがいっぱいになります。現在、ツリー アイテムのアクティブ化、ツリー アイテムの右クリック、グリッド セルの変更のイベントに接続しています。

メイン ループで実行されている wxWidget スレッドが A (3. これは lua スクリプトをロードするスレッドだと思いますよね?) とします。ツリー ノードをアクティブにすると、イベント (evt1) がキューに入れられます。イベント キュー (4. ですね?)、メイン ループは保留中のイベントをチェックし、イベント (evt1) を見つけてディスパッチします (5. しかし、イベント ハンドラからの lua 関数はスレッドによって呼び出されますか?メインループを実行する (A) または 2 番目のスレッドが作成される (B) ?)。

質問 5 でハンドラーを実行するために新しいスレッドが作成される場合、ツリー内の別のイベント (evt2) をイベント キューに入れ、メイン ループ スレッド (A) がそれをディスパッチして、新しいスレッド (C) を作成することができますか?前のイベント スレッド (B) がまだ戻っていない間に、lua の状態にアクセスして変更しますか?

これまでのホール テストでは、ツリー アイテム上でいくつかのタイマーをクリックしながらグリッドを再描画していたため、イベント ハンドラーはすぐに戻りません。

これまでの質問はすべて要約できると思いますが、wxLua は wxLua 内からの lua 状態へのアクセスを保護しますか?

前もって感謝します。

よろしくお願いします。

ハビ。

注: 同じ質問をメーリング リストに投稿してお知らせします。ソリューションを別のソリューションにコピーします。

4

1 に答える 1