ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
OpenRTM-aist-Python-1.0.1のManagerConfig.pyで
config_file_path = ["./rtc.conf",
"/etc/rtc.conf",
"/etc/rtc/rtc.conf",
"/usr/local/etc/rtc.conf",
"/usr/local/etc/rtc/rtc.conf",
None]
とWindowsでもこうなってるのが仕様なのかどうかわからない・・・
Linuxならこれで良いかもしれないけど.
それはさておき,今回はcoil(Common Operating System Infrastructure Layer)で遊んでみます.
今回のサンプルはここからダウンロードできます.
今回のサンプルは単に別のタスクをwhile文の中で待たせておいて,1秒ごとに外からのシグナルで再開させるだけのプログラムです.
ソースを見ていきます.
まず,
#include <coil/Mutex.h>
#include <coil/Condition.h>
#include <coil/Task.h>
としてcoilをインクルードします.
あとは,
class task : public virtual coil::Task
{
public:
task(){};
virtual int svc();
};
int task::svc()
{
static int count = 0; //タスクを待たせた回数
m_worker.mutex_.lock(); //排他処理
while(!m_worker.running_)
{
count += 1;
printf("task1の回数\t%d\n",count); //回数表示
m_worker.cond_.wait(); //待たせる
}
if(m_worker.running_)
{
printf("task1が終了しました\n");
}
m_worker.mutex_.unlock(); //排他処理
return 0;
}
のようなTaskにしておきます.
そして,main文では
task *task1 = new task(); //タスクの生成
m_worker.running_ = false; //falseの時にwhile文が回る,trueの時は終了
task1->activate(); //タスクを実行
for(int i=0;i < 5;i++)
{
Sleep(1*1000);
m_worker.mutex_.lock(); //排他処理
m_worker.cond_.signal(); //待ち状態から起こす
m_worker.mutex_.unlock(); //排他処理
}
Sleep(2*1000);
//while文終了
m_worker.running_ = true;
m_worker.mutex_.lock();
m_worker.cond_.signal();
m_worker.mutex_.unlock();
Sleep(1*1000);
こんな感じで.
説明不足ですが,今日のところはこのぐらいにしときます.
次回は何をやるかは未定です.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
config_file_path = ["./rtc.conf",
"/etc/rtc.conf",
"/etc/rtc/rtc.conf",
"/usr/local/etc/rtc.conf",
"/usr/local/etc/rtc/rtc.conf",
None]
とWindowsでもこうなってるのが仕様なのかどうかわからない・・・
Linuxならこれで良いかもしれないけど.
それはさておき,今回はcoil(Common Operating System Infrastructure Layer)で遊んでみます.
今回のサンプルはここからダウンロードできます.
今回のサンプルは単に別のタスクをwhile文の中で待たせておいて,1秒ごとに外からのシグナルで再開させるだけのプログラムです.
ソースを見ていきます.
まず,
#include <coil/Mutex.h>
#include <coil/Condition.h>
#include <coil/Task.h>
としてcoilをインクルードします.
あとは,
class task : public virtual coil::Task
{
public:
task(){};
virtual int svc();
};
int task::svc()
{
static int count = 0; //タスクを待たせた回数
m_worker.mutex_.lock(); //排他処理
while(!m_worker.running_)
{
count += 1;
printf("task1の回数\t%d\n",count); //回数表示
m_worker.cond_.wait(); //待たせる
}
if(m_worker.running_)
{
printf("task1が終了しました\n");
}
m_worker.mutex_.unlock(); //排他処理
return 0;
}
のようなTaskにしておきます.
そして,main文では
task *task1 = new task(); //タスクの生成
m_worker.running_ = false; //falseの時にwhile文が回る,trueの時は終了
task1->activate(); //タスクを実行
for(int i=0;i < 5;i++)
{
Sleep(1*1000);
m_worker.mutex_.lock(); //排他処理
m_worker.cond_.signal(); //待ち状態から起こす
m_worker.mutex_.unlock(); //排他処理
}
Sleep(2*1000);
//while文終了
m_worker.running_ = true;
m_worker.mutex_.lock();
m_worker.cond_.signal();
m_worker.mutex_.unlock();
Sleep(1*1000);
こんな感じで.
説明不足ですが,今日のところはこのぐらいにしときます.
次回は何をやるかは未定です.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする