2

luaでいくつかの並列操作を行っています。1 つは受信用、1 つは処理用、もう 1 つは再送信用です。スレッド間でデータを渡すために、テーブルを使用しています。

悲しいことに、今は複数の変数を渡す必要があります。パフォーマンスにあまり影響を与えずに「複数値テーブル」(キーごとに複数の値を持つことができるテーブル) を作成するにはどうすればよいですか? また、テーブルを使用するよりも効率的な方法はありますか?

これまでの簡略化されたコード:

sendQueue = {}
processQueue = {}

function recieveLoop()
    while true do
        Wait For recieve
        table.insert(processQueue, recievedText)
    end
end

function processLoop(sender, text, raw)
    while true do
        for key,value in pairs(processQueue) do
            processData
            table.insert(recieveQueue, raw)
        end
    end
end

そして、 receiveLoop についても同じ

これら 3 つの関数はすべてスレッド化され、互いに独立して実行されます。

4

2 に答える 2

7

テーブルは他のテーブルを保持できるため、各メッセージに必要な数の変数を格納できます。

それ以外の:

table.insert(queue, datum1)

あなたが持つことができます:

local message = {datum1, datum2}
table.insert(queue, message)

または単に:

table.insert(queue, {datum1, datum2})

メッセージに必要なだけ「パーツ」を含めます。受信側では、メッセージの部分をインデックスで参照できます。

print('foo:', message[1], 'bar:', message[2])

または、要素を展開します。

local foo, bar = unpack(message) -- this is `table.unpack` in Lua 5.2
print('foo:', foo, 'bar:', bar)

または、メッセージで名前付きフィールドを使用できます。

local message = {
      foo = datam1,
      bar = datum2,
}
table.insert(queue, message)

などなど。

于 2012-05-16T23:18:48.943 に答える
0

Lua のデータ構造の実体型は table だけなので、userdata (C) を使用しないと選択肢がありません。ただし、テーブルはテーブルのキーまたは値にすることができます。つまり、入れ子です。これが、複数の値を取得する方法です。

于 2012-08-03T23:18:58.690 に答える