在使用c ++的聊天应用程序中,线程无法正常工作

时间:2016-11-25 21:59:33

标签: c++ multithreading boost thread-safety fltk

我正在使用boost库和fltk制作聊天应用程序客户端部件。我为客户端部分创建了类,并使用线程来处理来自冻结的GUI 读取部分的线程包含一个等待从服务器读取的无限循环,所以我在客户端类中使用了该函数的线程
我用的代码

这是client.cpp构造函数中的线程

#include "Client.h"


Client::Client(string ip, int port) :
    socket(ios),
    ep(asio::ip::address::from_string("127.0.0.1"),5002)
{
    this->ip = "127.0.0.1";
    this->port = 5002;
    socket.connect(ep);
    thread t(&Client::run,this); // here the thread
    t.detach(); // i use detach to make it run alone so my app not wait it 
}

这个运行函数有无限循环等待从服务器读取并添加到线程中以免冻结GUI

void Client::run()
{
    while (true) {
        asio::streambuf buf;
        int read = asio::read_until(socket, buf, '\n');
        string message;
        istream in(&buf);
        getline(in, message);
        message.append("\n");
        buffer->append(message.c_str());
    }
}

问题,当我发送消息时,它并非同时发生。它来了几秒钟之后我可能发送4或5个消息他们一起收到的不是java当我运行run函数而类扩展线程我在其中使用无限循环消息同时快速出现所以我该怎么做解决这个问题,请我帮忙,因为我是初学者 提前致谢

0 个答案:

没有答案