2012-04-13 3 views
1

私はこの一日中、私の脳をつかまえてきましたが、私はそれを理解できません。私のサーバは、すべてのスクリプトをグローバル変数としてロードする単一の状態を使用します(スクリプトを実行するたびにluaL_dofileにすることなくいつでも呼び出すことができます)。問題は、車線を使用しようとしたときに起こります。 require "lanes"はLinux(Ubuntu 11.10 x86)上の適切なディレクトリにlanes.luaがあるので、適切に動作するように(私は思っていますか?それは適切にpackage.loadedにテーブルを返します)動作します。しかし、私がlanes.gen("", functionName)に行くとき、それは私に言う... attempt to index global 'lanes': a nil value。この時点で私はpackage.loaded["lanes"].gen("", functionName)を試してみることにしました。それは私に教えてくれます... attempt to index field 'gen': a nil value詳細が必要な場合は、私にお知らせください。少なくともお手伝いをしてくれてありがとうございます。ゲームサーバーでLua Lanesを動作させるにはどうすればよいですか?

答えて

1

あなたは(あなたがluarocks install lanesによって得るものである)latest LuaLanesを使用している場合は、モジュールをロードするサポートされている方法はこれです:

local lanes = require "lanes".configure() 

configure()configure()モジュールを呼び出す前に、すべての必要な機能を作成します。テーブルが空です。これはあなたの問題のようです。

+0

これは機能します。私はフォローアップをしています...私はこのレーンのものに精通しているわけではなく、「メインスレッドをロックしていない」ということを利用してサーバをハングアップさせようとしています。 'lanes.gen()'を使って作成したスレッドをCと通信させるにはどうすればよいですか?私はリンダの物などを作る必要がありますか?とにかく、私はこれまでこれを得ることに非常に感謝しています。あなたもこのフォローアップを処理できることを願っています。 – user1332555

+0

はい、スレッド間で通信するためには、リンダオブジェクトが必要です。スレッド関数の前に 'local linda = lanes.linda()'を作成し、 'linda:send()'と 'linda:receive()'を使って通信します。 –

+0

あなたは、作成された車線をCと通信させる方法について質問していました(@MichalKottmanが取ったように、別の車線ではなく)。マルチスレッド化せずに、C側のLuaモジュールを作る必要があります。より多くの情報を与えてください(自分のCのものか、既存のモジュールをロードする必要がありますか?requireを使用してください)。 – akauppi

関連する問題