Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 2个线程中的升压插座_C++_Multithreading_Sockets_Boost_Boost Asio - Fatal编程技术网

C++ 2个线程中的升压插座

C++ 2个线程中的升压插座,c++,multithreading,sockets,boost,boost-asio,C++,Multithreading,Sockets,Boost,Boost Asio,我正在使用boost套接字和boost线程。(同步套接字)。如果我理解正确的话,这个计划就行不通了 using boost::asio::ip::tcp; boost::asio::ip::tcp::socket *MySocket; bool Key = true; void Function1() { try { boost::asio::io_service io_service; tcp::resolver resolver(io_ser

我正在使用boost套接字和boost线程。(同步套接字)。如果我理解正确的话,这个计划就行不通了

using boost::asio::ip::tcp;
boost::asio::ip::tcp::socket *MySocket;
bool Key = true;

void Function1()
{
    try
    {
        boost::asio::io_service io_service;
        tcp::resolver resolver(io_service);
        boost::system::error_code error;
        boost::asio::ip::address address = boost::asio::ip::address::from_string(IP, error);
        tcp::endpoint ep(address, 1235);
        MySocket = new tcp::socket(io_service);
        MySocket->connect(ep);
        Key = false;
    }
    catch(std::exception e)
    {
        std::cout<<e.what;
    }
}

void Function2()
{
    boost::array <char, 8> buf;
    size_t len = MySocket->read_some(boost::asio::buffer(buf), error);
    //Always len == 0 and buf.data() is MMMMMMM
}

void main()
{
    boost::thread Thread(&Function1);
    while(Key);
    Function2();
    MySocket->close();
}
使用boost::asio::ip::tcp;
boost::asio::ip::tcp::socket*MySocket;
布尔键=真;
无效函数1()
{
尝试
{
boost::asio::io_服务io_服务;
tcp::解析器解析器(io_服务);
boost::system::error\u code error;
boost::asio::ip::address address=boost::asio::ip::address::from_字符串(ip,错误);
端点ep(地址,1235);
MySocket=新的tcp::套接字(io_服务);
MySocket->connect(ep);
Key=false;
}
捕获(标准::异常e)
{
std::coutclose();
}

您使用本地
io\U服务创建套接字,在
function1
返回后,该服务将被销毁。使其成为全局的。(当然,不要以这种方式设计实际应用程序!请坚持Asio文档中描述的方法。)

我认为简单的答案是阅读文档。文档中有很好的文档,甚至有示例。这不是怎么做的。另外,您正在取消对空指针的引用,这是未定义的行为。我不明白。您认为MySocket是空指针吗?在function1()中我正在初始化和打开这个套接字。它在另一个程序中连接到端口。为什么在函数2中()不工作?我读了Boosi::asIO的文档,但是我不理解。用于在C语言中写的,我没有这个问题。C++比C语言更重:(你的Function1代码描述不够。你在哪里创建套接字实例?提供你的实现,我们可能会给你一个错误的线索。你使用
键的方式也很糟糕,会导致问题。用一个。试试。最后,
void main
是非标准的。
main
返回
int
,句点。我知道这一点,但我只是想把它做好。感谢全球io_服务。