2013-09-26 110 views
0

什麼我試着去實現如下:在接收模式,並檢查傳入的包升壓定時器中斷

運行收音機。一旦第二個Id像定時器中斷一樣執行並將射頻切換到發送模式以發送一個包,然後返回到接收模式。

現在我有以下代碼:

int main(int argc, char** argv) 
{ 

    boost::asio::io_service io; 

    boost::asio::deadline_timer t(io, boost::posix_time::seconds(1)); 
    t.async_wait(boost::bind(sendSyncToDevices, boost::asio::placeholders::error, &t)); 

    io.run(); 
} 

void sendSyncToDevices(const boost::system::error_code& , 
    boost::asio::deadline_timer* t) 
{ 
    DoSomething(); 
    t->expires_at(t->expires_at() + boost::posix_time::seconds(1)); 
    t->async_wait(boost::bind(sendSyncToDevices, boost::asio::placeholders::error, t)); 


} 

然而io.run()是一個阻塞調用。有人可以建議我如何添加額外的while(1)循環來檢查收音機中的傳入消息嗎?

謝謝!

+0

我認爲這是C++代碼?你會想添加一個標籤來表明這一點。祝你好運。 – shellter

回答

2

你可能會得到你的答案類似的帖子

How do I perform a nonblocking read using asio?

他們已討論了具有讀取的方式/寫調用無阻塞。

或者,

否則而(1)上的應用程序代碼可能不是等待一個事件或I/O的最佳方式。你也可以在這些文件描述符上使用select()來嘗試輪詢風格(更多的C風格編程)。 Select()本質上是一個poll()函數,它比while(1)和反覆讀取文件要好得多。

希望這會有所幫助。