小编Fan*_*Fox的帖子

为什么std :: condition_variable采用unique_lock而不是lock_guard?

std::condition_variable 在使用中如下:

std::condition_variable cv;
...
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []{return processed;});
Run Code Online (Sandbox Code Playgroud)

在我看来有一个有趣的问题.unique_lock可以推迟,它可以被交换掉.代码设计可能有许多其他原因,并不一定是错误的,它实际上并没有被锁定.例如.

std::unique_lock<std::mutex> lk(m, std::try_to_lock_t); // or  std::defer_lock_t
// Try to lock fails.
cv.wait(lk, []{return processed;});
Run Code Online (Sandbox Code Playgroud)

为什么不通过改变std::conditional_variable工作lock_guard来强制执行锁定的情况呢?然后你会很难进入这种情况.事实上,唯一的方法是这样做:

// m is not already locked
std::lock_gaurd<std::mutex> lk(m, std::adopt_lock);
cv.wait(lk, []{return processed;});
Run Code Online (Sandbox Code Playgroud)

而不是可用的多种方式unique_lock.是否有一个技术理由使用unique_locklock_guardcondition_variable

c++ multithreading thread-safety

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

如何忽略 Web 浏览器中的脚本错误

当我关闭使用网络浏览器的应用程序时会发生什么。以下网址使用flash播放器。

替代文本

一切正常。此错误在应用程序关闭时显示。我该如何忽略它?

c# browser

4
推荐指数
1
解决办法
3万
查看次数

Matlab,结构到矩阵形式,矩阵以正确的方式定向

我有一个名为poseSets的结构,它包含两件事:

  1. 提出
  2. 时间

所以我想做的是将姿势(姿势是一个4x4矩阵)放到一个大的长(4xN_Poses) x 4矩阵中.

所以让我们想象一下,我有一个10长的结构列表.通过这样做我几乎可以得到我的列表:

[structList.Pose]
Run Code Online (Sandbox Code Playgroud)

但这给了我一个(4xN) x 4矩阵,即:

1 2 3 4 | 1 2 3 4 | 1 2 3 4 | ...
5 6 7 8 | 5 6 7 8 | 5 6 7 8 | ...
3 5 6 8 | 3 5 6 8 | 3 5 6 8 | ...
0 0 0 1 | 0 0 0 1 | 0 0 0 1 | ...
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是: …

matlab struct matrix

4
推荐指数
1
解决办法
322
查看次数

R和C++使用RStudio

2012年11月29日发布了一个新版本的RStudio,它可以" 编写C++函数,并将它们简单地输入到R中,就像您获取R脚本一样 ".我变得非常感兴趣,认为类似于将knitr和Latex集成到RStudio中,这使我能够将RStudio用于我的R程序和Latex代码,新版本使我能够对我的C++代码做同样的事情.我是C++的初学者,我认为现在Rstudio已经很容易用C++编程并在R中提供它,这是开始学习C++的好时机,我真正需要的是涉及繁重计算的项目.下载新版本并创建新的.cpp文件并编写简单的C++代码后,我无法编译它.你能指导我一下:

1)无论是新RStudio可以作为一个编辑器编写和运行我的C++代码,而不是Visual Studio或其他编辑/ IDE中?(什么,我与我的乳胶代码做类似)

2)如果是这样,我认为我需要单独设置C++编译器,你能指导我如何在mac中做到这一点吗?

3)像加载knitr包一样,我是否需要加载R中的任何包才能在Rstudio中获取/运行我的C++代码?

3)最后,我是否需要设置RStudio首选项才能直接从RStudio编译我的C++代码?

c c++ macos r rstudio

4
推荐指数
1
解决办法
5344
查看次数

复制2d矢量的最佳方法是什么?

说我有以下场景:

std::vector<std::vector<double>> v(6, std::vector<double>(6, 0.0));
std::vector<std::vector<double>> y;

for (const std::vector<double> &p : v) {
    y.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)

这是采取的深层副本v进入y.有没有办法std::copy2D矢量上执行此操作.

std::copy(v.begin(), v.end(), y.begin())
Run Code Online (Sandbox Code Playgroud)

不管用.奖励积分可以扩展到ND矢量案例吗?这似乎很重要,以避免以下循环N:

...
for (const std::vector<std::vector<<double>> &p : v) {
    for (const std::vector<double> &q : p) {
        ...
Run Code Online (Sandbox Code Playgroud)

我知道性能明智没有区别,因为这是如何std::copy实现的.只是想知道代码紧凑性.

c++ copy vector multidimensional-array

4
推荐指数
2
解决办法
4832
查看次数

VS2015无法理解静态内联函数

我在visual studio makefile项目的头文件中定义了以下函数,最终c使用msys-rtems以下内容构建:

static inline UInt32 timer_now() {
    ...
Run Code Online (Sandbox Code Playgroud)

其中类型UInt32typedef包含头文件的类型:

typedef unsigned long UInt32;
Run Code Online (Sandbox Code Playgroud)

由于该功能,我的intellisense出现以下问题:

  1. Intellisense建议inline不是类型名称.>Error: Variable 'inline' is not a type name
  2. Intellisense认为定义UInt32是这个函数而不是typedef unsigned long.
  3. 如果我删除inline关键字一切正常(除了我不想,因为这是一个我们想要内联的功能).
  4. 我不认为这完全与我有关,typedef UInt32因为如果我把它换掉,unsigned long我仍然会遇到同样的问题.
  5. 除了将static inline double它们作为第一个函数移动之外,在这个下面还有许多其他函数没有任何错误.然后他们会遇到同样的错误.

我尝试重新启动VS2015并删除SQL数据库文件.我玩过各种intellisense选项无济于事.这是一个intellisense错误?

另外需要注意的是,快速查看项目的其余部分会使其看起来像inline任何h文件中的第一个函数都有此问题.

Visual studio bug 在这里打开.

作为一个更小的例子,我将头文件简化为:

#ifndef SERVOSCHED_H 
#define SERVOSCHED_H

typedef unsigned long UInt32;
static inline UInt32 …
Run Code Online (Sandbox Code Playgroud)

c c++ intellisense visual-studio

4
推荐指数
1
解决办法
1740
查看次数

分配的数字太大而无法在位字段中表示未定义的行为

我有以下代码:

#include <stdio.h>
#include <stdint.h>

enum nums {
    ONE,
    TWO,
    TWENTY = 20
};

struct field {

    uint32_t something : 4;
    uint32_t rest : 28;
};

int main(void) {

    struct field f;
    f.something = TWENTY;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在运行 RTEMS 4.9.1 的 powerpc 8241 上,使用 minGW GCC 3.4.5(我知道它很旧)编译,此代码将导致段错误。我确定的原因是我们将一个数字设置为大,以便由相关位字段的位字段表示。由于我们有 4 位,它应该只能表示 0 -> 15,事实上,当我们用这些数字设置它时,它工作得很好。任何上面的东西都会崩溃。我无法在这里重现这种行为,所以我的问题是:

这是未定义的行为吗?如果是这样,交流标准中是否有涵盖它的参考文献?

或者它更可能只是因为我们非常旧的编译器而导致的错误?

c segmentation-fault undefined-behavior bit-fields

4
推荐指数
1
解决办法
679
查看次数

ROS包可视化

我正在开展一个涉及ROS的项目.在我之前从事该项目的学生制作了一个由+20包组成的程序.不幸的是,他没有很好地记录该计划.现在我只是处理文件夹和文件而不知道他做了什么.

有没有可用的工具可视化ROS中包的结构和组成?

我希望能够看到包中有哪些节点,它们发布和订阅的内容,以及哪些启动文件连接到哪些包和节点.

c++ ubuntu ros

4
推荐指数
1
解决办法
176
查看次数

禁止pcl注册中的cout输出

从这个问题:将函数输出重定向到/ dev / null我尝试使用以下代码:

 std::ofstream catchPCLStream("/dev/null");
 std::streambuf *originalOutputBuffer = std::cout.rdbuf();
 std::cout.rdbuf(catchPCLStream.rdbuf());
 std::cerr.rdbuf(catchPCLStream.rdbuf());

 icp_.align(dataCloudTransformedByIcp_, icpInternalUpdatePose_);

 std::cout.rdbuf(originalOutputBuffer);
 std::cerr.rdbuf(originalOutputBuffer);
Run Code Online (Sandbox Code Playgroud)

但是我仍然从注册库中获得大量输出:

[pcl::IterativeClosestPoint::computeTransformation] Not enough correspondences found. Relax your threshold parameters.
Run Code Online (Sandbox Code Playgroud)

此输出是否有其他与众不同之处,可以阻止它被此捕获?是不是去cout还是cerr

c++ iostream point-cloud-library

3
推荐指数
1
解决办法
1278
查看次数

警告有关数组索引中使用的int -0的引用

请考虑以下代码:

vector<int> a = {1, 2, 3, 4, 5};
cout << a[-0] << std::endl;
Run Code Online (Sandbox Code Playgroud)

此代码将编译并打印出来1.一切都很好.我假设编译器-0改为a 0.

有趣的问题:在不使用电脑的数字系统甚至允许-0作为int了吗?

我想不出你需要的任何理由,int -0它会让代码更加混乱?

是否有任何标志(如迂腐)会对此发出警告?

背景:我在一些工作代码中发现了一些,不知道为什么,但我想确保我们将来知道它们.

c++

3
推荐指数
1
解决办法
63
查看次数