小编Edw*_*ard的帖子

在VS2012中使用C++ 11条件变量

我无法使代码在一个简单的VS2012控制台应用程序中可靠地运行,该应用程序由使用C++ 11条件变量的生产者和使用者组成.我的目标是生成一个小的可靠程序(用作更复杂程序的基础),它使用3参数wait_for方法或者我在这些网站上收集的代码中的wait_until方法:

condition_variable: wait_for, wait_until

我想使用3参数wait_for和下面的谓词,除非它需要使用类成员变量对我以后最有用.我只在运行一分钟后收到"访问冲突写入位置0x_ _ "或"无效参数已传递给服务或功能"作为错误.

steady_clock和2参数wait_until是否足以替换3参数wait_for?我也试过这个没有成功.

有人可以展示如何使用下面的代码无限期地运行,没有错误或奇怪的行为,从夏令时或互联网时间同步的挂钟时间的变化?

链接到可靠的示例代码可能同样有用.

// ConditionVariable.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <condition_variable>
#include <mutex>
#include <thread>
#include <iostream>
#include <queue>
#include <chrono>
#include <atomic>

#define TEST1

std::atomic<int> 
//int 
    qcount = 0; //= ATOMIC_VAR_INIT(0);

int _tmain(int argc, _TCHAR* argv[])
{
    std::queue<int> produced_nums;
    std::mutex m;
    std::condition_variable cond_var;
    bool notified = false;
    unsigned int count = 0;

    std::thread producer([&]() {
        int i = 0;
        while (1) …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading condition-variable c++11 visual-studio-2012

6
推荐指数
2
解决办法
3027
查看次数

便携式硬实时C或C++原始以太网协议库

我正在尝试创建一个具有硬实时功能的业余爱好者便携式机器人库(Windows和Linux).它应该能够通过标准以太网连接到微控制器,将固件上传到该设备,通过现场总线连接到其他设备,并将固件上传到运行专用控制器的其他微控制器.如果需要硬实时,NIC将是RTnet支持的NIC.我希望典型的伺服速率至少为1 kHz,但最好是2 kHz或更高.它将运行一个完全自定义的协议(不是基于IP的TCP或UDP),因此开销很小,高速现场总线可以在不接收或发送帧时饱和.然后可以解释以太网帧中的有效载荷或将其发送到连接的设备.

1)我更喜欢将协议保留在C++中,但是知道使用"new"关键字不适用于实时编程.如果我选择使用C++语言而不是将项目转换为C,我会遇到哪些其他限制?人们会推荐教授如何利用C++并满足硬实时期限的书籍或网站吗?我相信它是可能的,我希望能够继续使用C++,因为Orocos项目使用实时C++.我宁愿不使用C代码.

2)为了保持便携式协议库的通用性,程序如何在非实时以太网适配器和RTnet以太网适配器上同时处理协议运行?

我所提出的一个具体问题是关于一个可以使用boost或Xenomai互斥锁的便携式Mutex类的问题.

问题2的解决方案1可能如下:如果应用程序也已使用Xenomai库编译,则可以使用布尔标志构造互斥锁,以说明在运行时将哪些方法(boost或Xenomai)包装以进行锁定和解锁.如果库是为Xenomai编译的,它可能包含boost mutex和Xenomai互斥锁.我不喜欢这个解决方案,因为如果项目是为Xenomai编译的,那么它将包含一个用于boost和Xenomai的互斥锁的私有变量,这似乎不那么优雅,只需要一个人需要的互斥锁.

问题2的解决方案2可能如下:将2个不同的派生类从纯虚拟接口方法的抽象类写入互斥锁,一个用于boost,一个用于Xenomai.我喜欢这种方式更好,但后来告诉在运行时使用哪个类是麻烦的.我可能不得不拥有一个增强池和Xenomai互斥体.这是大多数硬实时C++程序解决这个问题的方法吗?

我有这个问题不仅仅是一个互斥体,而是希望得到反馈,因为我不想从一开始就复制糟糕的设计模式.

3)我相信来自Beckoff的TwinCAT在Windows 7下实时运行EtherCAT.是否会出现任何在Windows 7或Windows 7下支持至少一个具有硬实时功能的NIC的爱好者无法触及的内容后来?也许有一个开源的Hypervisor项目.

4)此外,人们如何加载系统,以便他们的四核计算机使用每个核心的100%,以便他们可以判断他们的系统是否未实时运行?

c c++ protocols real-time raw-ethernet

5
推荐指数
1
解决办法
1553
查看次数