我正在尝试使用GTK,但我发现信号文档(https://developer.gnome.org/gobject/stable/signal.html)很难理解.
似乎"信号"和"事件"之间存在差异.例如,Widget的"事件" - 信号的文档(https://developer.gnome.org/gtk3/stable/GtkWidget.html#GtkWidget-event)说
GTK +主循环将为每个传递给窗口小部件的GDK事件发出三个信号:一个generic :: event信号,另一个更具体的信号,与所传递的事件类型相匹配(例如"按键事件"),最后一个通用的"事件后"信号.
所以在我看来,GDK使用"事件",而GTK +使用"信号".也许事件只是包含在信号中,反之亦然?或者他们是完全不同的东西?
我对上述引用的理解:当按下某个键时,会触发GDK事件.此GDK事件调用窗口小部件的回调函数(不是程序员干扰).然后,回调函数依次发出三个信号::event,key-press-event并且event-after一个接一个地发出.作为程序员,我可以通过编写回调函数来拦截这些信号.如果第一个::event信号的回调返回TRUE,那么第二个key-press-event信号不会被触发,否则就是.第三个event-after信号总是被触发.
我的理解是否正确?
此外,在文档中,有时信号由双冒号(::event)前置,有时它们不是(key-press-event和event-after).有什么不同?双结肠是什么意思?
我想使用Hyper的当前主分支编写服务器,该分支保存由POST请求传递的消息,并将此消息发送到每个传入的GET请求.
我有这个,大多是从Hyper示例目录中复制的:
extern crate futures;
extern crate hyper;
extern crate pretty_env_logger;
use futures::future::FutureResult;
use hyper::{Get, Post, StatusCode};
use hyper::header::{ContentLength};
use hyper::server::{Http, Service, Request, Response};
use futures::Stream;
struct Echo {
data: Vec<u8>,
}
impl Echo {
fn new() -> Self {
Echo {
data: "text".into(),
}
}
}
impl Service for Echo {
type Request = Request;
type Response = Response;
type Error = hyper::Error;
type Future = FutureResult<Response, hyper::Error>;
fn call(&self, req: Self::Request) -> Self::Future {
let resp = match …Run Code Online (Sandbox Code Playgroud)