2010年6月25日金曜日

連打対策っす

http://lsl-users.jp/codehighlight/を利用させてもらったっす。
ど、どんなもんっすかね?
どうもぺんぎんっす( ◎v◎ )


いつもとは趣向を変えて、ちょっと問題っす。
以下のコードをオブジェクトに入れて、touchしまくるっす。
連打っすね。
このとき、オブジェクトはどんなふうにOwnerSayすると思うっすか?
(連打を約1.5秒間続けた場合について考えてみてくださいっす)

[A]
reset
touch_start: 1
link_message: 1
touch_start: 2
link_message: 2

[B]
reset
touch_start: 1
link_message: 1
touch_start: 2
link_message: 2
touch_start: 3
link_message: 3
以下連打した回数続く

[C]
reset
touch_start: 1
touch_start: 2
link_message: 1
link_message: 2

integer count;
default
{
state_entry()
{
llOwnerSay("reset");
count = 0;
}
touch_start(integer total_number)
{
count++;
llOwnerSay("touch_start: " + (string)count);
llSleep(1.0);
llMessageLinked(LINK_THIS, count, "", "");
}
link_message(integer sender_num, integer num, string message, key id)
{
llOwnerSay("link_message: " + (string)count);
}
}
答えは試してみれば分かるので書かないっす。

touch_startとlink_messageじゃなくて、
moneyとdataserverなベンダーも考えられるっすね。
その場合は悲惨なことになるわけっす。
この辺が「ノートの読み込みは最初に全部すべし」の理由なんっすね。


連打じゃなくても「ほぼ同時」のケースでも起こりそうっす。
何かうまいこと処理してやらないといけないっすね。

0 件のコメント:

コメントを投稿

Free Avatar