小编Fan*_*Fox的帖子

没有全局互斥锁的 pThread 互斥锁

我在 pThread 库中看到的关于互斥锁的所有教程都使用了全局互斥锁:

看:

https://computing.llnl.gov/tutorials/pthreads/#Mutexes

http://www.drdobbs.com/cpp/184401518?pgno=3(用于 boost::thread 但上下文相同)

我想要做的是使用互斥锁,其中主文件的 Global 超出了需要锁定变量的函数的范围。这是一个例子:

主程序

int main() {
    some initilisation code.
    tree * tree1;
    *Start thread to visualise tree* (see code below)

    Mutex Lock:
         delete tree1;
         tree1 = newTree();
    Mutex Unlock
Run Code Online (Sandbox Code Playgroud)

可视化工具.cpp

visualise(Tree *) {
    Forever:
    Mutex Lock:
         Check for tree change.
         Update tree image.
         Display tree image.
    Mutex Unlock
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可能:

  1. 没有全局范围互斥锁。
  2. 如果可能,不将互斥体传递给可视化函数。

我知道这可能不合理,如果不是,我将如何使用 extern 将全局范围变量获取到 visualiser.cpp?

另外,如果我需要将互斥锁传递给函数,我将如何去做?

c++ mutex pthreads thread-safety

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

在单行中从多个数组创建结构

假设我有两个相同大小的数组:

X = [1 2 3 4 ...]
Y = [1 2 3 4 ...]
Run Code Online (Sandbox Code Playgroud)

但我想要的是一个结构:

S(1) =          S(2) = 
    X: 1            X: 2
    Y: 1            Y: 2
Run Code Online (Sandbox Code Playgroud)

解决这个问题的显而易见的方法是:

for ii = 1:length(X)
    S(ii).X = X(ii);
    S(ii).Y = Y(ii);
end
Run Code Online (Sandbox Code Playgroud)

你甚至可以使用它来压缩这一行arrayfun,但我正在寻找一个更简单的单行.我希望有一些与此类似的东西:

X = [S.X];
Run Code Online (Sandbox Code Playgroud)

这解决了同样的问题,但方向相反.

可能吗?

arrays matlab struct vectorization

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

禁止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
查看次数

在 pcl 注册方法中获取未被对应距离拒绝的内点。

我使用pcl的实现iterative closest point。我希望能够使用我使用的任何注册方法的内点。

registration班有能力输出时对齐功能被称为对准云:

icp_.align(outcloud, guess);
Run Code Online (Sandbox Code Playgroud)

PCLBase类具有以下功能:

indices = icp_.getIndices();
Run Code Online (Sandbox Code Playgroud)

不幸的是getIndices只返回整个云的索引。我已经在云上测试过,被距离对应拒绝的异常值(或内部值)似乎无法检索?

我查了一下,云中有一些应该被拒绝的点,见下文:

在此处输入图片说明

c++ point-cloud-library

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

为什么std :: sort不能在std :: list上运行?

由于std::sorta std::list,我收到以下错误:

line 44         : instantiated from here
line 5258 : error: no match for 'operator-' in '_last -__first'
line 179 : note: candidates are: ptrdiff_t std::operator-(const std::_Bit_iterator_base&, const std::_Bit_iterator_base&)

从以下代码:

int main()
{
    std::list<Student_info> students;
    Student_info record;
    string::size_type maxlen = 0;   // the length of the longest name

    // read and store all the students data.
    while (read(cin, record))
    {
        // find length of longest name
        maxlen = max(maxlen, record.name.size());
        students.push_back(record);
    }

    // alphabetize the student …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
610
查看次数

使用bash脚本以每小时循环打印日期

我想写一个bash脚本,用以下格式打印出日期:

20120205_16
(year)(month)(day)_(24 hour)
Run Code Online (Sandbox Code Playgroud)

所以在当前日期执行此操作的命令是:

date +'20%y%m%d_%H'
Run Code Online (Sandbox Code Playgroud)

我想做的是打印从指定日期到另一个日期的这样的日期(使用for循环或其他东西).例如:

20120205_16 -> 20120305_18 would be:

20120205_16
20120205_17
20120205_18
...
20120305_17
20120305_18
Run Code Online (Sandbox Code Playgroud)

显然,这里的两个硬位是指定日期并按小时递增.

是否可以使用日期或其他方法轻松完成此操作?

bash ubuntu date

2
推荐指数
1
解决办法
3468
查看次数

如果csvread失败,请跳过文件

所以我正在阅读一堆日志文件.其中大多数都适合与csvread一起使用,但有些是空的.当您将空文件传递给csvread时,您会得到以下结果:

Error using dlmread (line 139)
Badly formed format string.

Error in csvread (line 48)
    m=dlmread(filename, ',', r, c);

Error in CreateBDTable (line 15)
        digArea = csvread(sprintf('Converted_Logs\\DigAreaPoints\\%s', file2(j).name));
Run Code Online (Sandbox Code Playgroud)

有没有办法捕获或阻止这个,只是跳过这个文件?或者我是否需要进行一些预处理并查看文件?

csv error-handling file-io matlab

2
推荐指数
1
解决办法
1916
查看次数

使Matlab网格线更清晰可见

Matlab 2014b中的网格线又细又轻,这很难看清。是否可以增加Matlab网格线的可见性?

grid matlab

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

为什么将WSARecvMsg函数实现为函数指针并且可以重用此指针?

此处WSARecvMsg描述的函数要求您检索指向它的函数指针,如以下引用所示:

注意必须在运行时通过使用指定的SIO_GET_EXTENSION_FUNCTION_POINTER操作码调用WSAIoctl函数来获取WSARecvMsg函数的函数指针.

这有什么特别的原因吗? 在使用这个函数时,我打算在启动时检索函数指针,然后从那时开始一直使用它.这种方法有什么问题吗?关于函数的任何改变都意味着我们需要重新获取这个指针,我们怎么知道是不是这样呢?

c++ sockets windows

2
推荐指数
1
解决办法
502
查看次数

如何获取 pandas 表中所有命名类别的最大值

想象一下我有这样的数据:

  name  time
0    A     1
1    A     2
2    B     3
3    A     6
4    A     7
5    A     3
6    B     1
7    B     4
Run Code Online (Sandbox Code Playgroud)

每个条目都有一个命名类别和一些其他信息。在上面的例子中,让我们花点时间。这是我唯一关心的。

我想制作一个只有单独的独特name类别和每个类别的最大值的表。我可以做这样的事情:

max_table = pd.DataFrame(
    {
        "name": data.name.unique(),
        "max_val": [
            data[data["name"] == name].time.max() for name in data.name.unique()
        ],
    }
)
Run Code Online (Sandbox Code Playgroud)

但这感觉不太像熊猫。我必须在列表之间往返 pandas 表,并进行一些数组扩展才能完成这项工作。有没有办法只用 pandas 类型的调用来做到这一点?

包括数据创建的完整示例:

    data = pd.DataFrame(
        {
            "name": pd.Categorical(["A", "A", "B", "A", "A", "A", "B", "B"]),
            "time": [1, 2, 3, 6, 7, 3, 1, 4],
        }
    ) …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

2
推荐指数
1
解决办法
82
查看次数