小编Pat*_* B.的帖子

如何使增强螺纹自毁?(C++)

我有一个类,有一些功能,如:

void workerFunc(int ClassVariable)  
{  
    boost::posix_time::seconds workTime(classVariableA);  

    std::cout << "Worker: running" << std::endl;  

    // Pretend to do something useful...  
    boost::this_thread::sleep(workTime);  


    std::cout << ClassVariable << std::endl;  
    std::cout << "Worker: finished" << std::endl;  
}  
Run Code Online (Sandbox Code Playgroud)

我希望在线程中.以及我想要工作的其他一些功能

while(1)
{
 boost::thread workerThread(workerFunc(ClassVariableB));  
}
Run Code Online (Sandbox Code Playgroud)

所以每次都可以创建线程.但我需要的是该线程在完成后自动销毁.怎么办这样的事情?

c++ multithreading boost class function

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

在当前目录之外获取GIT构建哈希

我正在使用CMake来完成我的项目的核外/源外构建,并希望在项目中包含"git describe --tags --dirty"的结果作为版本号(仅供参考bug.但是,任何尝试告诉git代码repo所在的任何尝试都会导致错误,例如"致命:不是git存储库(或任何父目录):.git".

除了当前的工作目录之外,有没有办法指定git应该在哪里查找repo?

git cmake

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

_not_在代码项目中使用多个文件有什么好处吗?(C++)

为项目使用多于1个代码文件有什么好处相反(C++)我想知道不使用多个代码文件(例如C++)项目是否存在(技术或其他)优势?

分成几个文件只是一个人类的东西?在可视性/优化方面,机器一次处理所有这些并不是更好吗?

c++ code-organization

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

在宏范围内设置CMake宏参数

cmake-macro的参数是否在宏的范围内和期间是只读的?

请考虑以下代码:

macro(test arg)
    message("output: ${arg}")
    set(arg "overwritten")
    message("output: ${arg}")
endmacro(test)

test("original")
Run Code Online (Sandbox Code Playgroud)

输出是

output: original
output: original
Run Code Online (Sandbox Code Playgroud)

有没有办法改变这种行为?

cmake

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

什么时候C和C++ - 编译器隐式地将浮点数转换或提升为double?

对于嵌入式项目,我想知道符合标准的C编译器(C99)和C++编译器(C++ 11)何时可能隐式地将单浮点变量/值提升为double-float.

我知道有两种情况:

  1. 没有后缀的文字f.例如:3.14
  2. 使用variadic argument-list(...)将float传递给函数

还有其他人吗?模板怎么样?

这个问题的答案对我来说也很有帮助 - 包括它在这里供参考.

c c++ compilation c++11

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

为什么std :: function在C++ 11中没有隐式转换为bool?

请考虑以下代码.

#include <functional>

int main(void)
{
    std::function<void()> f1;
    if (f1) { /* ok */
        ...
    }

    bool b = f1; /* compile-error */
    bool B = !f1; /* ok */
    ...
}
Run Code Online (Sandbox Code Playgroud)

std::function<>在某些情况下隐式转换为bool但不是全部转换为bool.将其分配给bool-variable不起作用,而操作的结果或在if()-statement中使用它是可以的.

为什么会这样?看来我们必须对它进行布尔运算,然后转换才有效.

我做的工作b = f1是什么 - 线是好的'双重爆炸:!!.它看起来像现代C++中的古董 - 代码.

编辑:这也编译:

bool b = f1 || f1; /* OK */
Run Code Online (Sandbox Code Playgroud)

c++ function implicit-conversion c++11 std-function

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

使用 NetworkX 的有向图,如何找到从某个节点开始的单个输入叶节点?

采取下图:

G = nx.DiGraph()

G.add_edge(1,2)
G.add_edge(3,2)
G.add_edge(1,4)
G.add_edge(2,5)
Run Code Online (Sandbox Code Playgroud)

可视化给出:

在此输入图像描述

我想找到仅具有从 开始的“子图”内的传入边的叶节点1

在我的示例中,它必须找到4但不是55是其子级,2其具有3第二个输入。

我认为它应该是有后继者和 in_ Degree 的东西,但我是 NetworkX 的新手,很难找到正确的算法。

另一个例子:

G = nx.DiGraph()

G.add_edge(1,2)
G.add_edge(3,2)
G.add_edge(1,4)
G.add_edge(2,5)
G.add_edge(4,6)
G.add_edge(1,7)
G.add_edge(7,6)

G.add_edge(1,8)
G.add_edge(8,7)
G.add_edge(8,6)
G.add_edge(4,9)
G.add_edge(4,10)
G.add_edge(5,10)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在这里应该找到96。但不是10(因为3作为父母的2父母5

python networkx

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

如何使用touch命令在指定目录下创建文件

在Linux中,touch-command创建文件.但它总是在当前目录中创建它.如何在指定目录中创建文件?

例如

touch file ../my_directory
Run Code Online (Sandbox Code Playgroud)

linux touch

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

如何让编译器推导出C++ 11中模板化方法的返回类型?

我有一个模板化方法,其中return-type将是reinterpret_cast <>() - 调用的结果.

class A {
    void *_ptr;
public:
    template<typename T>
    T buffer() { return reinterpret_cast<T>(_ptr); }
};
Run Code Online (Sandbox Code Playgroud)

这种方式让我<>在调用这个函数时使用-syntax:

A a;
auto b = a.buffer<double *>();
Run Code Online (Sandbox Code Playgroud)

我更喜欢在没有模板参数的情况下调用此方法,并让编译器根据变量类型推断出返回类型.

A a;
double *out = a.buffer();
Run Code Online (Sandbox Code Playgroud)

返回型扣除是否可行?

我尝试使用auto,该->-operand和尾随返回类型的语法.

auto buffer() -> decltype(reinterpret_cast<T>(_ptr)) const 
     { return reinterpret_cast<T>(_ptr); }
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.

在C++ 11中有没有办法做到这一点?

c++ methods templates return-type c++11

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

每个线程或每个呼叫一个ZeroMQ套接字?

众所周知,ZeroMQ套接字不应在应用程序线程之间共享.
context_t然而,实例可以.

我有一个多线程应用程序,我想让每个线程不时地与REQ/REP-socket交易对手(事件,异常等)交换消息,这取决于他们正在做什么(他们正在做非ZeroMQ -东西 ).

要将消息发送到我的REQ/REP-socket,我使用以下函数
(半C++半伪代码):

sendMessage:

bool sendMessage(std::string s)
{
    zmq::socket_t socket(globalContext(), ZMQ_REQ);
    socket.connect("ipc://http-concentrator");

    zmq::message_t message(s.size());
    memcpy(message.data(), s.data(), s.size());
    if (!socket.send(message))
        return false;

    // poll on socket for POLLIN with timeout

    socket.recv(&message);
    // do something with message

    return true;
}
Run Code Online (Sandbox Code Playgroud)

需要时,从每个线程调用此函数.它创建一个本地套接字,连接,发送消息,并接收响应.在退出时,套接字被断开并被删除(至少我假设它已关闭).

这样,我不需要费心去维护每个线程中的套接字.这是以每次调用此函数时创建和连接为代价的.

我强调了这个代码,并没有看到重用一个套接字和这个重新连接实现之间有太大区别.(我REP/REQ在用例的两侧每秒有20k个事务,包括JSON解码/编码)

问:有没有更正确的ZeroMQ方式呢?

c++ multithreading zeromq

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