我有一个简单的客户端/服务器应用程序,其代码如下所述。请在 Linux 中的一个 shell 中运行服务器,在另一个 shell 中运行客户端。首先启动服务器,然后启动客户端。当服务器完成工作后,它会崩溃并出现以下异常:
抛出“std::system_error”实例后终止调用what():避免资源死锁
这是从函数 Service::HandleClient 内部的 m_thread->join() 行发生的,我不知道发生了什么。有人可以检查一下代码吗?我只是希望服务器应用程序也应该正确关闭客户端应用程序关闭的方式。
**服务器代码:**
#include <boost/asio.hpp>
#include <thread>
#include <atomic>
#include <memory>
#include <iostream>
using namespace boost;
class Service {
public:
Service(){}
void StartHandligClient(
std::shared_ptr<asio::ip::tcp::socket> sock) {
m_thread.reset(new std::thread (([this, sock]() {
HandleClient(sock);
})) );
}
private:
void HandleClient(std::shared_ptr<asio::ip::tcp::socket> sock) {
while(1)
{
try {
asio::streambuf request;
std::cout << "Waiting to read \n";
asio::read_until(*sock.get(), request, '\n');
std::string s( (std::istreambuf_iterator<char>(&request)), std::istreambuf_iterator<char>() );
std::cout << "Server got : " << s << …Run Code Online (Sandbox Code Playgroud) 我想创建如图所示的相同类型的 QTreeView(不是 QTreeWidget)结构。这是 QT 的属性编辑器。我正在使用 QT-4.6
在第二列,根据不同的条件,我可以有一个旋转框、一个下拉框、一个复选框或一个文本编辑……等等……请指导我如何在不同的单元格中设置不同的代表特定列。从文档中,很明显没有直接的 API 可以在单元格上设置委托(而是可用于完整的小部件或行或列)。