小编for*_*Dev的帖子

boost::beast::bind_front_handler 是如何工作的?

我正在尝试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

c++ boost boost-beast

9
推荐指数
1
解决办法
2991
查看次数

从 America/New_York 时间到 UTC 再转换回 America/New_York 的日期时间转换不正确

我正在尝试将美国/纽约的时间转换为 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 分钟的差异,可以采取什么措施来防止这种情况发生?

python datetime pytz

2
推荐指数
1
解决办法
1196
查看次数

Java 的 ByteArray 的签名是什么?

我正在尝试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;)IonEventChannel,但他们没有工作。

java的签名是ByteArray什么?

java java-native-interface kotlin

0
推荐指数
1
解决办法
80
查看次数