Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

コントローラーが使用できない #1

Closed
saha209 opened this issue Jun 25, 2023 · 10 comments
Closed

コントローラーが使用できない #1

saha209 opened this issue Jun 25, 2023 · 10 comments

Comments

@saha209
Copy link

saha209 commented Jun 25, 2023

コントローラー用入力プラグインを制作/公開しているサハ209と申します。
http://saha209kame.web.fc2.com/index.html

当方で公開しているプラグインを適応の上、そちらのプラグインを使用した車両をプレイするとノッチの入力が反映されずプレイができないことを確認しております。
当方プラグインではC#で開発し負荷対策でThreadでBVE側に値を送信しているため、そちら側でノッチ取得の反映時期が取れずBVEソフトではノッチが動いているのに車両プラグインにはノッチが動かず車両動作しないのかなと仮説をたてております。

ぜひ調べていただけたらと思います。よろしくお願いいたします。

@magicant
Copy link
Owner

問題が起きているのは外部コントローラー用のプラグインでしょうか?
bve-plugin-multiplexer は保安装置用のプラグインであり、コントローラー用プラグインに関係する処理は特に行っていないので、bve-plugin-multiplexer が直接問題を引き起こしているとはあまり考えにくいと思いました。

スレッド絡みの問題だとすると bve-plugin-multiplexer でスレッドローカル変数を使っているのが関係している可能性がなくはないですね。
スレッドローカル変数を使わないようにした bve-plugin-multiplexer をこの後 作ってみるので試してもらえますか?

@magicant
Copy link
Owner

@saha209 こちらでどうでしょうか
pluginmultiplexer-ca3cac6.zip

@saha209
Copy link
Author

saha209 commented Jun 25, 2023

既存データの置き換えてみたところ、32/64どちらもそもそも起動せず(半分ほど読み込んだ後フリーズ)でした。

@magicant
Copy link
Owner

@saha209
だとすると、やっぱりそちらのプラグインでのスレッドの利用方法が何かまずいのだと思います。
TsmcInterface のサンプルコードを見てみましたが、onKeyDown や onLeverMoved は Tick の中から呼ぶ想定に見えます。
onKeyDown や onLeverMoved を別スレッドから呼んでいるとしたら bve-plugin-multiplexer の動作以前に BVE 本体が正常に動作しているかどうかすら怪しい可能性があります。

@saha209
Copy link
Author

saha209 commented Jun 25, 2023

いえ、そもそも頂いた版ではコントローラー外した状態であってもシナリオが起動しません

@saha209
Copy link
Author

saha209 commented Jun 25, 2023

条件を色々試したところ、
【前提】
BVE5.8.7554.391及び6.0.7554.619 どちらで試しても結果は同等です。

ntfiv様817系ver5.22
https://kty-bvememo.hatenablog.jp/

ntfiv\train\JRK_CT_V52\scenario\Vehicle_tiku_817-1000_2R_JQP.txt

このデータのpluginmultiplexer**.txtには以下のようにプラグインが指定されています
....\dll\Plugins\ntfiv\shock_lite_x86.dll
....\dll\Plugins\ntfiv\door_ptpt_x86.dll
....\dll\Plugins\ntfiv\EmrBrake_x86.dll
....\dll\Plugins\SoundKey\SoundKey.dll
Onemanhoso.dll
....\dll\Plugins\CT\DK\x86\ATS-DK.dll
....\dll\Plugins\CT\Oneman\x86\JRQ_CT.dll

またコントローラーはZUIKI製のものを使用しています

【比較実験】
1.そのままシナリオを起動
→シナリオ読み込み段階でフリーズ
2.ひとつひとつ指定のプラグインを消して都度起動、またはそれぞれひとつのみプラグインの指定して都度起動
→いずれもシナリオ読み込み段階でフリーズ
3.pluginmultiplexer**.txt内に指定のプラグインをすべて消して起動
→シナリオ読み込み成功し、コントローラーも反映、動作

4.上記1-3を コントローラー及び入力PIのチェック 外して起動
→上記結果と同様、1と2はフリーズし3のみ正常起動

このことからいただいた版ではコントローラーの動作は正常化し、別プラグイン呼び出し部分で新たな問題が発生していると考えられます

@magicant
Copy link
Owner

2.ひとつひとつ指定のプラグインを消して都度起動、またはそれぞれひとつのみプラグインの指定して都度起動
→いずれもシナリオ読み込み段階でフリーズ
3.pluginmultiplexer**.txt内に指定のプラグインをすべて消して起動
→シナリオ読み込み成功し、コントローラーも反映、動作

pluginmultiplexer*.txt に何もプラグインを指定しなければ正常動作するということであれば、pluginmultiplexer*.txt に指定されているプラグインの動作が何らかの不具合の原因となっているのではないでしょうか。
bve-plugin-multiplexer を使わずに直接プラグインを読み込ませた場合の動作はどうですか

@saha209
Copy link
Author

saha209 commented Jun 26, 2023

直接プラグインをそれぞれ動かしても動作します。またrock_on氏のDetailManager.dllで同様の記述をしたものを使用しても起動します。bve-plugin-multiplexerを通じて指定した場面でのみ動作しません。

@magicant
Copy link
Owner

magicant commented Jul 2, 2023

@saha209
こちらでどうでしょうか。スレッド起動時に不要な初期化処理をしていたのを消しました。
pluginmultiplexer-a1cd3ac1.zip

@saha209
Copy link
Author

saha209 commented Jul 12, 2023

遅くなりました。確認したところ正常にシナリオが開き、またコントローラー使用も想定通り反映されました。
ご対応感謝いたします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants