小编Nis*_*rma的帖子

崩溃:抛出“std::system_error”实例后终止调用what():避免资源死锁

我有一个简单的客户端/服务器应用程序,其代码如下所述。请在 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)

c++ boost boost-asio

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

如何在 QTreeView 中添加不同类型的委托

我想创建如图所示的相同类型的 QTreeView(不是 QTreeWidget)结构。这是 QT 的属性编辑器。我正在使用 QT-4.6

在此处输入图片说明

在第二列,根据不同的条件,我可以有一个旋转框、一个下拉框、一个复选框或一个文本编辑……等等……请指导我如何在不同的单元格中设置不同的代表特定列。从文档中,很明显没有直接的 API 可以在单元格上设置委托(而是可用于完整的小部件或行或列)。

qt qitemdelegate qtreeview qstyleditemdelegate

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