小编use*_*238的帖子

解析Google协议缓冲区的文本文件

根据示例代码https://developers.google.com/protocol-buffers/docs/cpptutorial,它们展示了如何解析二进制格式的proto文件.运用

tutorial::AddressBook address_book;

{
  // Read the existing address book.
  fstream input(argv[1], ios::in | ios::binary);
  if (!address_book.ParseFromIstream(&input)) {
    cerr << "Failed to parse address book." << endl;
    return -1;
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试删除ios::binary文本格式的输入文件,但在读取文件时仍然失败.如何以文本格式读取原型文件需要做什么?

c++ io input protocol-buffers

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

将双端队列传递给新的pthread

我有一个代码块,我在一个pthread(让我们调用这个线程a),我希望产生一个新的pthread(让我们调用这个线程b).线程b需要传递一个双端队列,我有以下代码:

void* process_thread_b(void* arg)
{              
  deque<string> *ptr = (deque<string>*)arg;
  cout << "Size -" << ptr->size() << endl;

  deque<string>::iterator it;
  for(it = ptr->begin(); it != ptr->end(); it++)
  {
    cout <<(*it) << endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是线程b's代码.它传递一个双端队列并正确打印出大小.我尝试打印出任何元素的那一刻,我得到:

terminate called after throwing an instance of 'std::bad_alloc'
 what():  std::bad_alloc
Abort (core dumped)
Run Code Online (Sandbox Code Playgroud)

当我产生pthread时,我使用下面的代码......

 deque<string> myDeque;

 // Add strings to deque here...

 pthread_t dispatchCommands;
 pthread_create(&dispatchCommands, NULL, &process_thread_b, (void*)&myDeque);
Run Code Online (Sandbox Code Playgroud)

底部代码发生在线程中a.为什么当我尝试打印出deque的一个元素时,我收到一个错误,但我可以得到它的大小?

c++ pthreads thread-safety deque

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

标签 统计

c++ ×2

deque ×1

input ×1

io ×1

protocol-buffers ×1

pthreads ×1

thread-safety ×1