我在使用线程和信号设计应用程序的主要工作流时遇到了一些困难。
我的目标是要有一个主线程,捕获信号以及n个其他线程定期执行操作(实际上是在树莓派上使用传感器,并保存检索到的数据)。我希望能够以一种干净的方式关闭程序,即在关闭传感器之前等待传感器完成数据写入(如果它们是在发生信号时)。我正在使用C ++ 11。
现在,我有这个例子:
#include <iostream>
#include <thread>
#include <csignal>
#include <mutex>
#define NUM_THREAD 3;
static volatile int stop = 0; // If the threads needs to stop
std::mutex m; // Mutex
void threadHandle(int tid) {
while(1) {
std::cout << "Launched by thread " << tid << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << "I have sleep well " << tid << std::endl;
m.lock();
if(stop) {
std::cout << "Thread " << tid << " needs to stop" << std::endl;
m.unlock();
break;
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试将传入的Akka字节流(从http请求的主体,但也可以从文件中)拆分为多个定义大小的文件.
例如,如果我上传一个10Gb文件,它将创建类似10Gab的1Gb文件.这些文件会随机生成名称.我的问题是我真的不知道从哪里开始,因为我读过的所有响应和示例都是将整个块存储到内存中,或者使用基于字符串的分隔符.除了我不能真正拥有1Gb的"块",然后只是将它们写入磁盘..
有没有简单的方法来执行这种操作?我唯一的想法是使用这样的东西http://doc.akka.io/docs/akka/2.4/scala/stream/stream-cookbook.html#Chunking_up_a_stream_of_ByteStrings_into_limited_size_ByteStrings但转换成类似的东西FlowShape[ByteString, File],将自己写入文件块直到达到最大文件大小,然后创建一个新文件等,然后回传创建的文件.这看起来像一个不正确使用Akka的残暴想法..
提前致谢