[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/27 01:12 / Filesize : 247 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Lua】組み込み系言語総合 その2【Squirrel】



1 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:11:41 ]
LuaやSquirrelなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
wikiwiki.jp/lua/

その他の参考URLは>2から

■前スレ
【Lua】組み込み系言語総合【Squirrel】
pc12.2ch.net/test/read.cgi/tech/1205208141/

■過去スレ
その3 pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 pc5.2ch.net/tech/kako/1034/10341/1034182349.html

484 名前:477 mailto:sage [2009/11/23(月) 16:28:01 ]
みなさん、レスありがとうございます。

どうしてもluaでゲームを開発しなくてはいけない状況なのです。
ウィンドウの表示がわからないため、苦戦しています。
どの参考書を読んでも書いてなくて。

別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?

485 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:30:06 ]
>>484
なんでできないと思うの?

486 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:38:15 ]
>>485
レスありがとう

みんなやってないし、コマンドプロンプト上か
ほかの言語に組み込むだけのものかと思いまして・・・

487 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:46:43 ]
aims.dna-softwares.com/
こことか見てみ
Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる

それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて
いったいどんな大見得切ったんだよ

488 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:53:23 ]
参考書読んだのなら、Luaを使っている人がどのような目的と仕組みで走らせるのかは理解した?
あくまで組み込みスクリプトなんだよ?
ウィンドウズを表示するという関数を組み込んでもらって、
Luaにインターフェース提供してもらわないとprintやscanすらままならないよ
ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ

489 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:00:01 ]
レスありがとう

正直、大学のゼミでこの言語を使うということに決めたんです
いくつもある言語から選んで、luaを選んだのは自分だけ。
頼る人もいないので、本とネットで勉強してるかんじです。

>>487
サンプルをdlして参考にしていますが、難しい。
もっとじっくり読んでみます。

>>488
用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・
やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。

490 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:11:31 ]
明日、学校でごめんなさいして
もっと詳しくて質問できる奴のいる言語で
最初からやり直す方がましのような気がする。

491 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:13:36 ]
>>490
それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ

492 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:17:17 ]
それでここきてなんとかしようなんてあますぎる



493 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:18:29 ]
C側とのデータのやり取りがめんどいから余り良い言語とは・・・

494 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:23 ]
>>489
> やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。

Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。
もともとそうやって使う言語だろうに。

「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。

495 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:36 ]
Luaの言語を理解して使えるようになる手間を1とすると、
ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ
Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない
ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う
ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う

496 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:27:39 ]
怒られたくなくて嘘を付いている幼児じゃあるまいし
無理せず諦めておけよ

497 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:33:10 ]
>>493
つまりAngelScriptがいいって事ですね。
わかります。

498 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:42:29 ]
自分の実力より遙かに上の事をやろうとしても無駄になるだけだぞ
ちょっと上ならともかく分不相応すぎ。諦めろ

499 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:48:07 ]
Luaじゃ宿題スレも使えないしねえ。
(答える奴はどうせこのスレも見てる)

500 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 18:23:45 ]
HSPスレに逝けよ

501 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:35:31 ]
とりあえず、この本みてみて、何とかなるか考えてみたら。

スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践
www.amazon.co.jp/dp/4797348550
サポートページ
lua.mine.nu/w/LuaBookSupport

どうなんだろうなあ。

502 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:46:36 ]
ttp://en.wikipedia.org/wiki/Category:Lua-scriptable_game_engines
Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど
日本語の資料があんまりないと思う



503 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 10:46:49 ]
Lua for Windows: A batteries included Lua installation on Windows.
luaforwindows.luaforge.net/
これいっこダウンロードしてインストールすれば、
GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。
ウィンドウ作る程度なら、サンプルそのまま使える。

504 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:48:34 ]
Pawn始める人への組み込みメモ(修正版)
// .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。
// 必要ファイル: amx.c/h amxaux.c/h amxcons.c/h amxcore.c osdefs.h
#include "amx.h"
#include "amxaux.h"
#include <stdio.h>
AMX_NATIVE_INFO console_Natives[];
AMX_NATIVE_INFO core_Natives[];
int main(int argc, char *argv[]) {
 AMX amx;
 cell ret = 0;
 if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1);
 if (amx_Register(&amx, console_Natives, -1)) exit(1);
 if (amx_Register(&amx, core_Natives, -1)) exit(1);
 if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1);
 printf("%ld\n", (long)ret);
 aux_FreeProgram(&amx);
 return 0;
}





505 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:49:39 ]
// Pawnコンパイラの最小プロジェクト
// 必要ファイル: libpawnc.c lstring.c/h memfile.c/h sc1.c〜sc7.c sc.h sc5.scp sc7.scp scexpand.c sci18n.c sclist.c scmemfil.c scstate.c scvars.c svnrev.h
// それに加えて ../amx でアクセスできる場所に osdefs.h amxdbg.h が必要
// 実行時にsc1.cのsetconfig()あたりでNULLエラーが発生するなら[プロジェクトの設定->構成プロパティ->全般->文字セット]でUnicodeを無効にしておく
#include "sc.h"
int main(int argc, char *argv[])
{
return pc_compile(argc, argv);
}


506 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:11:52 ]
luabindを使っていて気になったのですが、

//cpp
struct A {
 int x;
};
A *ptr;
A& ref() { return *ptr; };
A a;
luabind::module(L) [
 luabind::def("ref", &ref),
 luabind::class_<A>("A")
  .def_readwrite("x", &A::x)
];
];
--lua
v = ref()
v.x = 1 --参照なのでC側のaにアクセスできる

クラスのインスタンスの参照を渡すときに、上の様に一度staticかglobalな変数
(上の場合ptr)を経由させる方法しか思いつかなかったのですが、ダイレクトに
渡す方法は無いものでしょうか?

507 名前:506 mailto:sage [2009/11/25(水) 14:14:17 ]
訂正

A a;
ptr = &a;
luabind::module(L) [
 luabind::def("ref", &ref),
 luabind::class_<A>("A")
  .def_readwrite("x", &A::x)
];

508 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:56:07 ]
Lua詳しくないんでアレだが、lua_pushlightuserdataではダメなの?


509 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:43:19 ]
Luaで実行状態を全部ファイルに保存して、また復帰するようなことは可能ですか?

510 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:10:30 ]
>>509
Lua側でioで記録、読み込みするコード書くしかないかも

511 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:18:51 ]
Smalltalkなら可能です

512 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 11:32:21 ]
>>509
言語機能としてはないので、無理やりやることになる。

一応こういうのはあるけど、安定してるかどうかは不明。
lua-users.org/wiki/PlutoLibrary



513 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:19:28 ]
>>508
試してみましたが、luabindではligthuserdataではなくuserdataを使用して
独自の型ID等を付加してチェックしているようで、無理でした。
luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで
C++側の変数の参照をluaのスタックに積めることが分かったので、
これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。
luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が
記載されていないので、本来の使い方とは違う気もしますが。

514 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:24:32 ]
>>513
通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。
C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。
別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。

まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。

515 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:29:57 ]
休止モードを呼び出せばいいんだよ。

516 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 14:09:30 ]
>>514
bind側に参照を渡した場合は、ポインタに変換して管理してるみたいですね。

517 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 08:47:27 ]
>>510 >>512
ありがとうございます。
Pluto調べてみます。

518 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 09:36:22 ]
LuaでGUIムリだろと思ってたら、意外とバインダが出てくるもんだなw
お前ら優しすぎw

519 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:21:52 ]
小学生に方程式ムリだろと思ってたら、意外と鶴亀算が出てくるようなもんだな

520 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 11:31:33 ]
最近はメインループのかなりの部分まで組み込みスクリプトで作っちゃうのが主流になりつつあるのかな。

521 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:02:53 ]
Luaだと入力補完のあるエディタが無いから
逆にやり難いと感じる俺

522 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:11:48 ]
>>520
大半を組み込み言語化した結果、パフォーマンスの壁にぶちあたって
機能分離可能なところはどんどんC++化していく、ってのが定番だとオモ

サンプル:俺



523 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:45:05 ]
まあ通常、動的(型付け)言語はネイティブコードと比べて10倍以上は遅いからな。
オレもスクリプトでゲーム開発環境を一通り書き上げたところだが、
60フレームまわしたらそれだけで意外にCPU食ってしまうので、ちと困ってる。
最低ラインがPentium 4 2.4GHzくらいになった。

524 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 14:49:37 ]
JIT付き静的型付けスクリプト言語
穴場だから誰か作れば
有名になれるかもよ

525 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:10:52 ]
>>524
すでにあるっちゅうねん。
.NET Framework向けだがな。

526 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:54:13 ]
>>.NET Framework向けだがな。

駄目じゃん

527 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:18:55 ]
作りたいと本気で思ってる俺が来ましたよ
もし作るならスクリプトで定義したクラスのインスタンスがC++から簡単に作れて、マルチスレッドとか使って同時に複数のインスタンスを参照してもおかしくならない仕様にしたいな

528 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:46:03 ]
つAngelScriptJIT
ただしやり方は不明。

529 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 18:52:02 ]
LuaJIT ってなかったっけ?

530 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:09:51 ]
Luaは静的じゃないでしょ

531 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:18:30 ]
ああごめん、静的を見落としてた

532 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:59:21 ]
luaのlua_pcallのerrfncが呼ばれたときに、元のエラーメッセージとは
別にソースファイル名、行番号を収集する場合なんですが、
lua_getstackのレベル指定で、1から++しながら順にたどって
最初にcurrentlineの値が-1以外になったレベルがソースファイルの
階層と判断して問題ないでしょうか?




533 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 15:45:53 ]
メンバアクセスの:と.ってどう違うの?

534 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 17:27:09 ]
.が通常のメンバアクセスで、:でアクセスする場合は
v.(v ,〜 に展開される。
例: v:open(arg) -> v.open(v, arg)

535 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 17:53:43 ]
d

536 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:04:12 ]
>>17 問題1
使用言語: R

f <- function (n) {substr("abcdefghijklmnopqrstuvwxyz",1,n)}

> f(6)
[1] "abcdef"
> f(30)
[1] "abcdefghijklmnopqrstuvwxyz"

537 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:06:04 ]
すみません。
書くところを間違えました。
ごめんなさい。

538 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:06:48 ]
聞かれてないけどついでに補足すると.は[]に展開される
v:member(arg) -> v.member(v, arg) -> v[menbe](v, arg)

539 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:09:23 ]
v['menber'](v, arg)

540 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:17:00 ]
へー
じゃあメンバアクセスのたびにマップ検索してんのか
遅くならないのかな

541 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:28:37 ]
空想具現化プログラミングというところから落としたlua5_1_3_Win32_mbenc_a2.zipを展開したところbin2c5.1.exeにウイルス検知ソフトが反応したんですが、これは大丈夫なんでしょうか?

542 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:31:42 ]
>>540
そりゃ勿論遅いだろうさ



543 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:41:44 ]
メンバだけの話じゃないだろうし。
変数名からなにから全ての識別子の判定で毎回どこかのテーブル見てるはず。

544 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:59:47 ]
>>541
カスペルスキー系の誤検出のはず。
bin2cとか別に普段使うものでもないから削除しておいても良いかと。

545 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:20:09 ]
>>543
ローカル変数は実行時はテーブル見ない。例えば、
local a = b * c + d

local a = b * c
a = a + d
に変えても速さは変わらない。

546 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:37:56 ]
>>544
ありがとうございます安心しました

547 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 23:33:25 ]
静的型付けならPawnいかがかな?

548 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 22:05:16 ]
ちょっと確認したいんですが

lua_registerで登録した関数を呼び出すときには新しいスタックが毎回生成される、したがって
Glue関数内部ではlua_gettopでスタックの数を確認する必要なしにスタックの1番目が最初の引数、2番目が・・・としてよい
同様に、返り値もスタックの1番目が最初の返り値、二番目が・・・としてよい(何も考えずにスタッククリアして返り値を積めばいい)

これは正しいですか?

549 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 00:52:46 ]
うむ

550 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:17:28 ]
>>524
ActionScript 3.0 がそっちのほうを目指しているんじゃないかな。
いちおう Flex SDK はオープンソースらしいから、
自分のプログラムに組み込むこともできるかも。

>>540
Lua Performance Tips
www.lua.org/gems/sample.pdf

for i = 1, 1000000 do
local x = math.sin(i)
end

runs 30% slower than this one:

local sin = math.sin
for i = 1, 1000000 do
local x = sin(i)
end


551 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 21:46:34 ]
Luaについて質問です。
10進数で書かれた文字列、たとえば「\130\160\130\162\130\164」は
Lua上で「あいう」となりますが、外部ファイルに記述したものを
io.linesで取り出したものだと、コード列が返ってきてしまいます。
これを通常の文字列に変換したものとして使いたいのですが、どうしたらいいのでしょうか。

552 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 21:50:08 ]
>>549
ありがとうございます



553 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 22:20:40 ]
>>551
多分C側でバイナリに変換しないとダメじゃないだろうか。
Luaの標準ライブラリでももしかしたら出来るかもしれないが、
Cの方がてっとり早いだろう。

554 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:27:17 ]
SquirrelのほうがLuaよりゲーム向けなんかな?
どっちも知識なしだったらSqから勉強でいいのだろうか

555 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:54:06 ]
>>554
どちらも汎用スクリプトだから処理系単体ではどちらがよりゲーム向けということはない。
周辺ライブラリやバインダの入手性や使い勝手の差はあると思うけど。

556 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 01:51:00 ]
>>554
速度がLua>Sqで結構大差あったりするんで
ttp://ja.wikipedia.org/wiki/Squirrel
のLuaとの違いに強い魅力を感じるんでなければLuaがオススメ。
特に知識なしなら、Luaのほうが日本語資料が充実してるんで勉強しやすいかと思う。


557 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 02:00:16 ]
lua は文法がな……

558 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 08:15:39 ]
日本語は文法がな・・・

559 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 09:41:13 ]
AngelScript|Д゚)ジー

560 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 11:48:28 ]
>>551
loadstring をつかえばできるよ。

local str = "\130\160\130\162\130\164" -- io.lines で取り出した文字列
local decode = loadstring("return \"" .. str .. "\"")
print(decode())


561 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 15:29:08 ]
>>449
コンパイラがOSロケールに依存してるから英語にしましょうなんて愉快すぎるわ
他のロケール依存アプリ全部道連れにする方法なんぞ万人に薦められんだろ

562 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:39:37 ]
問題が起こるのはShiftJISを決めうちして作っている一部の馬鹿アプリだけだろ。
なぜ全部とか間抜けな話になるのか、頭の悪い奴の考えはさっぱり分からん。



563 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:40:53 ]
バカアプリの代表が Visual Studio って話じゃないのん?

564 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:39:01 ]
そんな事よりお前ら、GameMonkeyについて語るんだ。


565 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:47:34 ]
winアプリにスクリプト組み込む場合、メッセージ(WM)処理どうしてる?
自分はマルチスレッドにしてるんだけど、WM_CLOSE受けたときに
スクリプトが走ってたら、スレッド他殺していいものなのかどうか。

566 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:57:22 ]
保存したいデータがあるかどうかで判断しね?

567 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:00:15 ]
データ保存しない場合はどんなタイミングで落としても問題無いってこと?

568 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:16:24 ]
スクリプトを複数スレッドで別々に動かす状況がわからんな…
Luaだと、Lua_yieldでスクリプトの処理を一時停止させて次のスクリプト、という感じではダメなの?

569 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:43:49 ]
それだとスクリプト書く側に停止を意識させないとダメですよね?

570 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 22:23:10 ]
スクリプト側にメインループを置いて処理してるの?

571 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 00:38:27 ]
winmainでメッセージループ、別スレッドでスクリプト。
スクリプトは入力待ち(マウス等)で関数無いで停止することがあって、
その間にメッセージループ側にWM_CLOSEとか来た場合にどうやって
終了させるかで色々迷っている、と。

スクリプトで割り込みを意識するような書き方は手間なので、
スレッドごと落とせると楽なんだけど、lua_Stateってスレッドごと
落とした後にlua_closeに渡して大丈夫なのか?ってのが疑問な
わけですよ。

lua_call系にステップ実行があると良かったんですがね。
ステップ数も指定できたりするのが。

572 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 09:26:27 ]
>>571
スレッドを強制終了したら、基本的に何が起こってるか不明というか
たとえばガベコレの途中だったりしたら(その他でもあらゆる不明な原因で)
異常な状態になるからやめたほうが良い。

手段としては、別スレッドのほうの処理をコルーチンで構成しておいて、
コルーチンがyieldしたタイミングでコルーチン呼び出し側のコードで
終了チェックするようにする。

あとウエイトが絡む関数については、待ちループで終了チェックをするようにして、
終了フラグが立っていたらyieldを起こすようにする。

とかそんな感じじゃないの。



573 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 09:30:46 ]
>>571
無限ループ防止という観点では、デバッグフックで1行実行ごとに関数呼ばせて、
その中でカウンターアップしていって、カウンターが一定の数になったらyieldとかいう手もある。はず。

574 名前:デフォルトの名無しさん [2009/12/03(木) 11:24:54 ]
スクリプト側の待ちループの中でlua_yieldを呼び出すグルー関数を呼びだすようにしておき、
メッセージ処理の待ちの間、具体的には

MSG *lpMes=&m_Msg;
ZeroMemory( lpMes, sizeof(MSG) );
while(lpMes->message!=WM_QUIT)
{
if(PeekMessage(lpMes,NULL,0,0,PM_REMOVE))
{
TranslateMessage(lpMes);
DispatchMessage(lpMes);
} else {
〜〜〜
}
}

の、〜〜〜の部分で1回目はlua_call、2回目以降はlua_resumeでスクリプトを呼び出せばいいような気がする。


575 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:28:06 ]
>>565
他のスレッドはいきなり殺したらあかんでしょ。
メインスレッドからフラグたてて、よしなに自殺

576 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:29:49 ]
てか、この辺のマルチスレッドの話ことってLua関係なくないか?

577 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:44:10 ]
>>571
(before)
入力待ち(マウス等)で関数内で停止する

(after)
yieldを使い、外で停止する
入力が来たらresumeで関数内に戻る
WM_CLOSEが来たらresumeしないまま終了

578 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 12:59:28 ]
lua関係ないよな。普通にC++だけで書いてても全く同じだ。

まあ、lua (ないしは squirrel) なら、yield のタイミングで同期を
とるようなコードにしておくのが無難ってのはその通りだと思われ

579 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:42:03 ]
>>573
なるほど、それならステップ実行できますね。

>>他のレスくれた方々
具体的に書いた例だとマルチスレッドになってるけど、根本は
WindowsでLua使うときにメッセージ処理をどうしてるかって話ですから。
避けて通れないだろうから、実際に組み込んでる方々はどう対処してるかが
気になったもので。

580 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:32:02 ]
>>579
シングルスレッドモデルで組んであれば処理の流れ的に問題になるようなことは別にない

あとはオブジェクトをどう管理してるかの問題。

ウインドウのインスタンスを lua 配下にしてある(生成もlua側から)なら、それぞれのウインドウの
メッセージ処理部から、lua でのインスタンスの適当なメソッド (onCloseとか) をイベント的に callback
させて閉じるかどうかをスクリプト側に判定させればいいだろう

ウインドウのインスタンスがグローバルなら、lua 側も同様に
グローバルメソッドをイベントとして呼び出して判定させるように組めばいい





581 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:14:29 ]
Luaのスタックとか文法とかにいまいち馴染めないからエンゼルスクリプトをやってみようかと思ったが日本語資料がなさすぎて泣いた

582 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:28:07 ]
>エンゼルスクリプト

なんか可愛いな



583 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:39:34 ]
つ英文マニュアル
結構読みやすいよ。
あと、WIPのtest_featureに入ってるサンプルもわかりやすい。

584 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:37:59 ]
エンゼルスクリプトって速度どれくらい?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<247KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef