我正在尝试boost::beast示例,我遇到了这段代码。
void on_write(beast::error_code ec, std::size_t byte_transferred) {
if (ec) return fail(ec, "write");
http::async_read(m_tcp_stream, m_buffer, m_response, beast::bind_front_handler(
&Session::on_read, shared_from_this()));
}
void on_read(beast::error_code ec, std::size_t bytes_transferred) {
if (ec) return fail(ec, "read");
//std::cout << m_response << std::endl;
write_on_file(m_response);
m_tcp_stream.socket().shutdown(tcp::socket::shutdown_both, ec);
if (ec && ec != beast::errc::not_connected) return fail(ec, "showdown");
}
Run Code Online (Sandbox Code Playgroud)
特别是http::async_read(m_tcp_stream, m_buffer, m_response, beast::bind_front_handler(&Session::on_read, shared_from_this()));这一行。我无法理解它的代码。它是如何工作的。据我从代码中得到的信息,它返回它在其内部bind_front_wrapper构造了 a 。但我不明白它如何设法获取传入的参数,即使我们没有传递,我们只是传递。在本例中是调用方法。但我们没有传递任何参数,但它仍然被调用,我想知道如何?Handlertuple of argsHandlerbind_front_handlershared_ptrasync_readon_read
我正在尝试将美国/纽约的时间转换为 UTC 时间,然后将其转换回纽约时间。但我在使用 时得到了不同的结果pytz。
我正在这样做:
new_date = parser.parse("May 4, 2021")
new_date = new_date.replace(tzinfo=pytz.timezone("America/New_York"))
date = new_date.astimezone(pytz.timezone("UTC"))
Run Code Online (Sandbox Code Playgroud)
输出:
datetime.datetime(2021, 5, 4, 4, 56, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)
当我尝试将其重新转换回纽约时间时,我得到以下信息:
date.astimezone(pytz.timezone("America/New_York"))
Run Code Online (Sandbox Code Playgroud)
我得到:
datetime.datetime(2021, 5, 4, 0, 56, tzinfo=<DstTzInfo 'America/New_York' EDT-1 day, 20:00:00 DST>)
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么会有 56 分钟的差异,可以采取什么措施来防止这种情况发生?
我正在尝试onEventChannel通过 JNI调用C++:
class MainActivity: FlutterActivity(){
companion object {
@JvmStatic
private fun onEventChannel(b: ByteArray): Int {
Log.d(TAG, "onEventChannel");
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我试着(Ljava/lang/byte;)I和(Ljava/lang/ByteArray;)I对onEventChannel,但他们没有工作。
java的签名是ByteArray什么?