1

MFC ダイアログ ベースのアプリがあり、Lua を統合しました。ダイアログには、ユーザーがスクリプトを入力できるように、テキスト エディター コンポーネントがあります。ダイアログには「実行」ボタンもあり、押すと次のようになります。lua_pcall(luaVM,0,0,0); luaVM は私のメインの lua_State* です。ダイアログには別のボタン「停止」もあり、「実行」によって開始された現在実行中のスクリプトを停止できるようにするには、ボタンを押す必要がありますが、アプローチが思いつきません。助けていただければ幸いです。

4

2 に答える 2

1

Luaはそのような方法で使用することを意図していません。Luaは本質的にシングルスレッドです(LuaスレッドではなくハードウェアCPUスレッド)。スクリプトが開始されると、そのスクリプトを終了できるように設計しない限り、単にスクリプトを終了する方法はありません。

あなたがしなければならないことは、コルーチンとしてユーザーのスクリプトを開始することです。そして、そのコルーチンは頻繁に(そして手動で)降伏する必要があるため、スクリプトを停止する必要があるかどうかを確認できます。これは手動のプロセスであるため、ユーザーがコードを適切にインストルメント化するか、スクリプトを変更してyield呼び出しを適切に追加する必要があります。

デバッグフックを使用して数秒ごとにチェックし、停止する必要がある場合はコルーチンを生成できる場合があります。ただし、デバッグフックから譲ることが合法である場合、これが実際に機能するかどうかはわかりません。

于 2012-07-11T15:50:06.753 に答える
0

少しの間スリープするデバッグフックを設定できます。

http://www.lua.org/manual/5.1/manual.html#lua_sethookを参照してください。

于 2012-07-12T09:53:47.683 に答える