私はC++ 11、Qt 5.6(すぐにV-Playがサポートするとすぐに5.7)、QMLでデスクトッププログラミングゲームを作っています。ユーザーはパズルを解決するための任意のコードを書くことができます。ただし、コードは完全にサンドボックス化されており、ではなく、はアプリケーションの残りの部分で問題を引き起こします。Qt/C++で確実にスレッドを削除するには?
私はその環境を完全に制御し、それを通してプレーヤーのコードを実行するスクリプトエンジンをインスタンス化します。私は、エンジンに依存するソリューションを望んでいないので(私は複数の言語をサポートするかもしれません)、どのスクリプトエンジンがいいのかは言いません。プレイヤーが「Submit」を押すと、スクリプトを非同期で実行するので、残りのゲームはまだ応答します。
ここに私の問題があります:プレーヤーのコードが実行に時間がかかる場合はどうなりますか?それとも無限ループなのか?プレイヤーはとなるので、間違いを犯すことがありますので、「それはしないでください」はではなく、ここで有効な回答です。
だから、私はちょうどプレイヤーにコードを無条件で終了させるだろう。 しかし、未定義の動作、メモリリーク、クラッシュ、またはゲームに悪影響を与える可能性のある他のものを危険にさらすことなく、どうすればいいですか?関連性の
次のとおりです。
- ソリューションは、マルチプラットフォームである必要があります。
- 解決策はではありません。は、私が使用しているスクリプトエンジンによって異なります。
- 私はスレッド間でデータを渡していないので、データ競合を心配する必要はありません。
QtConcurrent::run
はを返しません。をサポートQFuture::cancel
です。
本当のサンドボックス化が必要な場合は、chromiumで実装されているような別々のプロセスを使用する必要があります。 –