我有一个类,有一些功能,如:
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)
所以每次都可以创建线程.但我需要的是该线程在完成后自动销毁.怎么办这样的事情?
我正在使用CMake来完成我的项目的核外/源外构建,并希望在项目中包含"git describe --tags --dirty"的结果作为版本号(仅供参考bug.但是,任何尝试告诉git代码repo所在的任何尝试都会导致错误,例如"致命:不是git存储库(或任何父目录):.git".
除了当前的工作目录之外,有没有办法指定git应该在哪里查找repo?
与为项目使用多于1个代码文件有什么好处相反?(C++)我想知道不使用多个代码文件(例如C++)项目是否存在(技术或其他)优势?
分成几个文件只是一个人类的东西?在可视性/优化方面,机器一次处理所有这些并不是更好吗?
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)
有没有办法改变这种行为?
对于嵌入式项目,我想知道符合标准的C编译器(C99)和C++编译器(C++ 11)何时可能隐式地将单浮点变量/值提升为double-float.
我知道有两种情况:
f.例如:3.14...)将float传递给函数还有其他人吗?模板怎么样?
这个问题的答案对我来说也很有帮助 - 包括它在这里供参考.
请考虑以下代码.
#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) 采取下图:
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但不是5。5是其子级,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)
在这里应该找到9和6。但不是10(因为3作为父母的2父母5。
在Linux中,touch-command创建文件.但它总是在当前目录中创建它.如何在指定目录中创建文件?
例如
touch file ../my_directory
Run Code Online (Sandbox Code Playgroud) 我有一个模板化方法,其中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中有没有办法做到这一点?
众所周知,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方式呢?