小编sor*_*h-r的帖子

在C++ 11中处理互斥

我有一个代表有限状态机的类,它应该在永久循环中运行并检查它的当前状态.在每个状态机器中将设置它的下一个状态,或者进入idle状态或做一些工作.我想允许另一个线程在它运行时改变机器的状态.这将导致预期的竞争条件.所以我添加了一个互斥锁定/解锁包装循环的机器和公共方法,允许其他线程改变机器的当前状态.

class Robot
{
public:
    enum StateType {s1,s2,s3,idle,finish};
    void run();
    void move();
private:
    StateType currentState;
    StateType nextState;
    StateType previousState;
    std::mutex mutal_state;
};
Run Code Online (Sandbox Code Playgroud)

执行:

void Robot::run()
{
    this->currentState = s1;
    while(true)
    {
        mutal_state.lock();
        switch(currentState)
        {
        case s1:
            // do some useful stuff here...
            currentState = idle;
            nextState = s3;
            break;
        case s2:
            // do some other useful stuff here...
            currentState = idle;
            nextState = finish;
            break;
        case s3:
            // again, do some useful things...
            currentState = idle;
            nextState = …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading mutual-exclusion c++11

9
推荐指数
1
解决办法
3190
查看次数

将3d模型加载到OpenGL场景中

我需要在我的项目中加载和存储3d模型,并在OpenGL场景中渲染它们.我可以选择要导出的模型类型.dwg,max,step和其他一些格式可用.刚刚发现OpenGL是低级API,并且不包含任何解析3d模型文件的工具.我正在寻找一些库/ API来将3d文件结构转换为OpenGL基元(或其他一些原始数据)并将它们存储回具有指定格式的文件中.

例如,我想加载一个步骤文件,旋转和缩放一些对象,然后保存修改后的文件.

c++ opengl api qt

8
推荐指数
1
解决办法
8927
查看次数

向函数添加带默认值的参数是否会破坏ABI?

标题说明了所有.我将为具有默认值的类的成员函数添加一个参数.这个论点属于非平凡的类型.这会破坏ABI吗?假设我的新库版本将会出现M.m.0,并且应该可以作为所有使用的链接应用程序的替代品M.m-1.x.

示例代码:

// These are some classes: base and child : public base

/* Version 1.2.3 */
class foo() {
public:
   void do_that_stuff(const std::string a);
}

/* Version 1.3.0 */
class foo() {
public:
   void do_that_stuff(const std::string a, const base& b = base());
}
Run Code Online (Sandbox Code Playgroud)

PS:我做了自己的测试,并且它正在运行.只是不能确定

c++ backwards-compatibility abi

8
推荐指数
1
解决办法
822
查看次数

X(X,X)的结果是什么?

一个学习纯数学的朋友让我考虑下面的问题.

假设有一个名为X的算法有2个输入:A和a_1 ... a_n,其中'A'代表仲裁算法,'a_1..a_n'是A的输入.X接收A及其输入和返回如果带有a_1..a_n的A可以终止,则返回true;如果带有a_1..a_n输入的A落入无限循环(永不结束),则返回false.像这样:

A(n):
   while(n<5):
      write "I'm immortal!"
Run Code Online (Sandbox Code Playgroud)

结果X(A,6)是真实的,X(A,2)是假的.

那结果是X(X,X)什么?

另外,你知道谁是第一个引入这个问题的人吗?

经过一个小时深入思考后编辑:你能看到一些与Russel悖论相当的东西吗?

algorithm

7
推荐指数
3
解决办法
774
查看次数

在Ubuntu 11.10上编译OpenCV2.3.1时出现奇怪的链接器错误

我正在尝试按照此处描述的指令在Ubuntu 11.10上编译OpenCV版本2.3.1 .我收到了以下错误.无法理解发生了什么...... /usr/local/lib/libavcodec.a存在但链接器无法链接它或其他东西?

错误:

[ 20%] Built target pch_Generate_opencv_highgui
Linking CXX shared library ../../lib/libopencv_highgui.so
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet' 
can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

linker opencv compiler-errors compilation

7
推荐指数
1
解决办法
6587
查看次数

Flex ++ Bisonc ++解析器

我正在尝试使用flexbison在我的项目中为文件结构生成解析器代码.主要编程语言是C++,项目主要是并行运行的OO设计.

我听说flex并且bison生成的解析器是C代码,它们不是重新检测的.谷歌搜索,我发现flex++bisonc++.不幸的是,没有简单的入门教程.大多数例子都是基于bison/flex.有些人以某种方式将bison/flex解析器集成到他们的C++代码中.他们应该"狡猾"......

文档,flex++bisonc++没有帮助我和.教程和示例,它们都从stdin获取输入并在stdout上打印一些消息.

我在解析器中需要这些功能:

  1. 解析器应该是一个C++类,以正常方式定义(头文件和cpp文件)
  2. 解析器从任一个接收数据std::stringstd::stringstream或空终止char*.

我感到很困惑.我应该使用flex++/bisonc++flex/bison?如何做到这一点,满足上述条件?

c++ parsing bison flex-lexer

7
推荐指数
1
解决办法
6307
查看次数

将std :: duration转换为人类可读时间

是否有标准实现打印std::duration为人类可读的持续时间?

steady_clock::time_point start = steady_clock::now();
doSomeFoo();
steady_clock::time_point end = steady_clock::now();
std::cout << "Operation took "
          << may_be_std::theMagic(start-end) << std::endl;
Run Code Online (Sandbox Code Playgroud)

哪个应该打印类似于:

"Operation took 10d:15h:12m:14:s"
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

c++ time c++11 c++-chrono

7
推荐指数
2
解决办法
3234
查看次数

在python中有两个键的索引器

我是python的新手.我想写一个带有两个键作为索引器的类.还需要能够在类中使用它们,如下所示:

a = Cartesian(-10,-10,10,10) # Cartesian is the name of my class
a[-5][-1]=10
Run Code Online (Sandbox Code Playgroud)

在笛卡尔类中:

def fill(self,value):
   self[x][y] = x*y-value
Run Code Online (Sandbox Code Playgroud)

我试着用

def __getitem__(self,x,y):
  return self.data[x-self.dx][y-self.dy]
Run Code Online (Sandbox Code Playgroud)

但不起作用.

python

6
推荐指数
1
解决办法
3300
查看次数

如何在使用单个测试项目时将所有QtTestLib单元测试结果组合在一个文件中?

在我们的项目中,我们使用QtTestLib进行单元测试.原因是整个项目在可能的情况下已经使用Qt并且它是一个GUI应用程序,因此我们希望能够测试GUI界面.

我们的项目是由MSVC编译的,所以我们不希望每个测试都有一个单独的项目文件,因为它会使解决方案变得混乱.因此,我们为所有测试创建了一个项目.所有测试都应该在CIS上自动进行(持续集成),因此我们尝试使用一些XSLT转换通过XML格式的输出文件将测试插入Hudson.

但似乎测试输出存在问题.如果对所有测试使用单个main(),并且仅向每个测试传输cmd行参数:

#include "MyFirstTest.h"
#include "MySecondTest.h"

int main(int argc, char **argv)
{
  int result = 0;
  MyFirstTest test1;
  result |= QTest::qExec(&test1, argc, argv);
  MySecondTest test2;
  result |= QTest::qExec(&test2, argc, argv);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个多次重写的结果文件.因此,如果您想使用输出文件(例如xml)稍微自动化它,您将只获得其中的最后结果.所有其他都将被覆盖.

我们已经尝试过这种方法,它不能让你使用像Hudson这样的连续集成系统.所以我的问题是:有没有机会在一个输出文件中附加结果?当然,我们可以使用一些解决方法,例如通过QTest :: qExec()运行每个测试,并使用修改后的参数将结果写入单独的文件,但这似乎不是最好的方法.理想情况下,我希望有一个结果文件与CIS一起使用.

c++ qt qttest qtestlib

6
推荐指数
1
解决办法
2653
查看次数

使用0MQ连接到TCP的第一个空闲端口

我正在编写一种分布式搜索算法,其中代理需要在TCP套接字上侦听传入连接.在某些时候,代理应绑定一个空闲的TCP端口.端口号并不重要,但代理应将其侦听端口号发送给其他代理.

我想这是正确的做法:

socket.bind("tcp://*:0");
Run Code Online (Sandbox Code Playgroud)

套接字成功绑定但是,如何获取套接字绑定的端口号?我在zmq_getsockopt页面返回端口号时看不到任何选项代码.

c++ sockets zeromq

6
推荐指数
1
解决办法
3902
查看次数