C++ 是否可以检查串行端口是否空闲或占用?

C++ 是否可以检查串行端口是否空闲或占用?,c++,serial-port,boost-asio,C++,Serial Port,Boost Asio,我正在使用boost asio库进行串行端口通信 我在windows上运行“COM3”端口。当端口“COM3”空闲时,它运行良好,但当其他应用程序已占用“COM3”端口时,此代码引发异常 异常发生后,应用程序将终止 我想继续申请。所以,我的要求是:我可以检查端口“COM3”是否可以自由使用或被某些应用程序占用吗 代码为: boost::asio::io_service io_service; boost::asio::serial_port* port; try{ port = new

我正在使用boost asio库进行串行端口通信

我在windows上运行“COM3”端口。当端口“COM3”空闲时,它运行良好,但当其他应用程序已占用“COM3”端口时,此代码引发异常

异常发生后,应用程序将终止

我想继续申请。所以,我的要求是:我可以检查端口“COM3”是否可以自由使用或被某些应用程序占用吗

代码为:

boost::asio::io_service io_service;
boost::asio::serial_port* port;

try{
    port = new boost::asio::serial_port(io_service, "COM3");
}
catch(boost::system::system_error& e)
{
    cout<<"Error: " << e.what()<<endl;
    cout<<"Info: "  << boost::diagnostic_information(e) <<endl;
    return 1;
}
boost::asio::io_服务io_服务;
boost::asio::串行_端口*端口;
试一试{
端口=新的boost::asio::串行_端口(io_服务,“COM3”);
}
捕获(boost::system::system_错误&e)
{
cout“我可以检查端口“COM3”是否可以免费使用吗”-是:如果呼叫

port = new boost::asio::serial_port(io_service, "COM3");
在准备使用端口时不会引发异常:

boost::asio::io_service io_service;
boost::asio::serial_port* port;

try{
    port = new boost::asio::serial_port(io_service, "COM3");
    // Port is now ready to be used by your application.
}
catch(boost::system::system_error& e)
{
    // Opening the port did not work, go on with error-handling
    cout<<"Error: " << e.what()<<endl;
    cout<<"Info: "  << boost::diagnostic_information(e) <<endl;
    // If you call return 1 from your main-function, the app will exit:
    return 1;
}
boost::asio::io_服务io_服务;
boost::asio::串行_端口*端口;
试一试{
端口=新的boost::asio::串行_端口(io_服务,“COM3”);
//端口现在已准备好供应用程序使用。
}
捕获(boost::system::system_错误&e)
{
//打开端口不起作用,请继续进行错误处理

无法在此处找到我的问题的解决方案:


如果我改用boost::shared_ptr,它不会抛出异常,但会给出一些错误代码,我将能够继续使用我的应用程序。

这里缺少一些东西,您有一个try catch,您是否捕捉到了正确的异常???但在它抛出异常后,应用程序将退出。对吗?我想继续使用application@skc那么,不退出?也许您不应该
返回1
?@skc:不,如果抛出异常,应用程序不会总是退出:如果捕获异常,则异常被“处理”通过应用程序,应用程序将执行您在catch块中告诉它执行的任何操作。如果您没有捕获异常,程序可能会以类似“致命异常”的方式退出。有关异常处理的更多信息,请参见此处:哎呀..我的错误..在发布问题之前我应该先查看异常..坦率地说,这是一堆废话。
boost::system::errorcode&
的重载不会抛出,但它与共享指针无关同意..事实上,我误解了(老实说,忘记了)异常..我的错误..如果我处理异常,则不需要共享ptr。