|
|
发表于 2006-2-13 22:56:07
|
显示全部楼层
这个原理很简单的。你可以在你的程序里创建一个消息队列,然后开几个线程做事情。比如说一个线程专门负责处理键盘响应(主要是数据处理,然后按自己定义的格式把它挂到消息队列里去),一个线程专门负责鼠标响应(这些响应linux下好像有库函数可以处理的,所以获得它们的数据不是很难的。)。而主线程专门进行消息循环,一读到消息队列里有东西立即处理。而处理函数就可以写成你所说的钩子函数啊!比如说像下面一样。int msg_deal(int one, int two, void *three, void * four, int(* proc)()){ proc(one, two, three, four);},然后你就可以写各种各样的消息处理函数当参数传给msg_deal。比如,主线程在消息队列里捕获了一个键盘消息,再比如键盘消息的处理函数为msg_keybord_deal(int one, int two, void *none1, void *none2){},挂在消息队列里的键盘消息的表记为MSG_KEYBORD,那么主线程的消息循环可以这样写switch (msg){case MSG_KEYBORD:
msg_deal(one, two, three, four, msg_keybord_deal); break;};响应另外的消息道理类似! |
|