C++ 从另一个函数退出函数
C++ exit function from another function
我已经为连载 link 创建了一个 class 具有读取功能。
我使用 boost::asio::read 从串口 link 读取数据。但是读取函数会无限等待直到接收到一个字节。
我想创建一个线程,在超过最大等待时间后停止读取功能(因为系统似乎出现故障)。
是否可以从另一个函数退出 C++ 中的一个函数?或者取消从其他函数调用读取函数?
std::string SerialLink::read(const int maxTime) {
std::string data;
std::vector < uint8_t > buf;
const int readSize = 1;
try {
buf.resize(readSize);
//boost::asio::read waits until a byte has been received
boost::asio::read(port_, boost::asio::buffer(buf, readSize));
data = buf.front();
}
catch (const std::exception & e) {
std::cerr << "SerialLink ERROR: " << e.what() << "\n";
return -1;
}
return data();
}
void threadTime() {
//This function will keep track of the time and if maxTime has passed, the read function/function call must be cancelled and return -1 if possible
}
Is it possible to exit a function F in C++ from another function G?
不,但您可以考虑在 G 的主体中(从 F 调用)throwing some exception (and catching F 中的异常,在同一线程内)
Or cancel the read function call
这是特定于操作系统的。在 Linux 上,您可以使用 non-blocking IO (and use poll(2) to detect when input is available, e.g. in your event loop). You could also use asynchronous IO. See aio_read(3) and aio_cancel(3).
如何在一个线程中阅读 (pthread_t thread_read;
),然后在另一个线程中启动计时器 (pthread_t thread_timer;
)。
在期望的周期后,您取消阅读线程 (pthread_cancel(thread_read);
)
如果 port_
是一个普通的文件描述符并且你有可用的POSIX,你可能首先调用 select
or poll
它(后者更容易使用),两者都提供超时功能。
设备和 OS 具体(您必须阅读文档),ioctl
甚至可能允许您获取 多少 可用数据。 ..
我已经为连载 link 创建了一个 class 具有读取功能。 我使用 boost::asio::read 从串口 link 读取数据。但是读取函数会无限等待直到接收到一个字节。
我想创建一个线程,在超过最大等待时间后停止读取功能(因为系统似乎出现故障)。
是否可以从另一个函数退出 C++ 中的一个函数?或者取消从其他函数调用读取函数?
std::string SerialLink::read(const int maxTime) {
std::string data;
std::vector < uint8_t > buf;
const int readSize = 1;
try {
buf.resize(readSize);
//boost::asio::read waits until a byte has been received
boost::asio::read(port_, boost::asio::buffer(buf, readSize));
data = buf.front();
}
catch (const std::exception & e) {
std::cerr << "SerialLink ERROR: " << e.what() << "\n";
return -1;
}
return data();
}
void threadTime() {
//This function will keep track of the time and if maxTime has passed, the read function/function call must be cancelled and return -1 if possible
}
Is it possible to exit a function F in C++ from another function G?
不,但您可以考虑在 G 的主体中(从 F 调用)throwing some exception (and catching F 中的异常,在同一线程内)
Or cancel the read function call
这是特定于操作系统的。在 Linux 上,您可以使用 non-blocking IO (and use poll(2) to detect when input is available, e.g. in your event loop). You could also use asynchronous IO. See aio_read(3) and aio_cancel(3).
如何在一个线程中阅读 (pthread_t thread_read;
),然后在另一个线程中启动计时器 (pthread_t thread_timer;
)。
在期望的周期后,您取消阅读线程 (pthread_cancel(thread_read);
)
如果 port_
是一个普通的文件描述符并且你有可用的POSIX,你可能首先调用 select
or poll
它(后者更容易使用),两者都提供超时功能。
设备和 OS 具体(您必须阅读文档),ioctl
甚至可能允许您获取 多少 可用数据。 ..