ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
RTミドルウェアを実装する上で重要の要素として実行コンテキストがあるわけですが、LuaのC APIはマルチスレッドで動作させることができません。
上のリンクのサイトではC側のプログラムで並列処理ができるようにしていますが、Luaだけでやろうと思うとこのようなコルーチンによる疑似マルチスレッドを使うことになります。
yieldで処理を中断して、他の処理に移るということなので、見かけ上は並列にしているように見えます。
つまりyieldで中断しなければ永久に他の処理は実行されません。
oilの中身もこんな感じの処理をしているので、同じようにyieldで中断すれば実行コンテキストも実装できます。
あと、V-rep等でoil実行の際に必要なファイルについてメモしておきます。
luaフォルダからは以下のファイル、フォルダをコピーします。
さらにclibsフォルダからCモジュールをコピーする必要があります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
上のリンクのサイトではC側のプログラムで並列処理ができるようにしていますが、Luaだけでやろうと思うとこのようなコルーチンによる疑似マルチスレッドを使うことになります。
yieldで処理を中断して、他の処理に移るということなので、見かけ上は並列にしているように見えます。
つまりyieldで中断しなければ永久に他の処理は実行されません。
oilの中身もこんな感じの処理をしているので、同じようにyieldで中断すれば実行コンテキストも実装できます。
local coroutine = require "coroutine"
ExecutionContext = {}
ExecutionContext.new = function()
local obj = {}
obj.run = function()
while true do
print("run")
coroutine.yield(1)
end
end
return obj
end
oil.main(function()
・・・・・
・・・・・
ec = ExecutionContext.new()
oil.newthread(ec.run)
あと、V-rep等でoil実行の際に必要なファイルについてメモしておきます。
luaフォルダからは以下のファイル、フォルダをコピーします。
- oil.lua
- luaidl.lua
- socket.lua※
- oil
- luaidl
- loop
- socket※
さらにclibsフォルダからCモジュールをコピーする必要があります。
- oil/bit.dll
- socket/core.dll※
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする