我对Boost的侵入式指针有些困惑。定义说:
“每个新
intrusive_ptr实例都通过对函数使用不合格的调用来增加引用计数intrusive_ptr_add_ref,将指针作为参数传递给它。同样,当intrusive_ptr销毁an时 ,它会调用intrusive_ptr_release;该函数负责在引用计数降至零时销毁对象。希望用户为这两个功能提供合适的定义。”
这是否意味着我必须实现这些方法,或者我可以做到?关键是,我们正在使用它,因为函数需要一个侵入式指针。我们在其他地方使用了共享指针,因此只担心该指针是否受管理,并且在没有更多引用时将被删除。
当时我们正在尝试为串行通信创建一个接口,以便能够与微处理器进行通信。
实际上 - 一切正常。几乎!为了能够与我们的控制器通信,我们需要与它同步。为此,我们编写一个字符串:"?0{SY}13!",然后控制器应回复"!0{SY}F5?"以接受同步请求。为此,我们使用一个writeData函数(有效 - 我们知道使用echo),然后我们使用 areadData来阅读答案。问题是,由于某种原因,它不会读取任何内容。虽然它返回1成功,但它读取的字符是恒定的" "(没有)。
现在是奇怪的部分 - 如果我们使用外部终端程序来初始化端口(如 putty),然后关闭程序,那么一切正常。它接受同步请求、回答(我们可以阅读它),然后我们可以做我们想做的一切。但是除非我们使用外部程序来初始化端口,否则它不起作用。
初始化接口的构造函数如下所示:
SerialIF::SerialIF(int baud, int byteSize, int stopBits, char* parity, int debug)
{
string coutport = getPort();
wstring wideport;
debug_ = debug; //Debuglevel
sync = false; //sync starts with false
error = false; //Error false as beginnging
//this is just for converting to the right type
for (int i = 0; i < coutport.length(); i++) …Run Code Online (Sandbox Code Playgroud) 我的目标是将时间戳存储在纳秒范围内.假设我有两台机器需要在任务完成的时间进行通信.
让我们只是为了问题,说他们是同步时钟.
机器A在完成后存储当地时间.机器B发送到A,此时它完成.机器A然后计算差异.
我的问题是,时差实际上可以达到60秒,但也可以降到.25ms.所以我需要以这样的方式存储时间,我可以处理两者,并计算时差.
由于纳秒时代以来的时间是如此之大,我认为我不能将其存储在我所知道的任何变量中.
你会如何解决这种情况?我当前的情况是,我可能(某种程度上)可以缩短从ns开始的时间到代表1分钟的时间,但我不知道该怎么做.
希望你能帮忙.
最好的祝福
c++ ×3
boost ×1
c++-chrono ×1
c++11 ×1
pointers ×1
readfile ×1
shared-ptr ×1
time ×1
winapi ×1
windows ×1