忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[616]  [614]  [613]  [612]  [611]  [610]  [609]  [608]  [607]  [606]  [605
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

RTミドルウェアを実装する上で重要の要素として実行コンテキストがあるわけですが、LuaのC APIはマルチスレッドで動作させることができません

上のリンクのサイトでは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※
LuaSocketのライブラリはV-Repには最初から入っているので不要です。

さらにclibsフォルダからCモジュールをコピーする必要があります。
  • oil/bit.dll
  • socket/core.dll※
socket/core.dllはV-Repには最初から入っているので不要です。










にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
35
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]