另一个程序/进程如何中断程序的执行?

时间:2014-10-03 18:13:56

标签: user-interface callback interrupt

让我们说我在支持UI的操作系统中编写了一个非常简单的程序。我的程序如下所示: -

#include <os_specific_ui.h>
int main()
{
 // Create a button using os specific API
 object my_button = add_button("I am a button"); 

 // Register for a mouse down call back on that button
 mouse_down_handler = register_mouse_down_cb(my_button, func_to_be_called_on_mouse_down);

 // do something... 
 // have a lot of functions which keep calling each other for a long period of time
}

void func_to_be_called_on_mouse_down(void)
{
 print("my_button got clicked");
}

该程序显然是一个单线程程序。当我运行它时,它会继续做某事。同时,如果有鼠标按下事件,则为其注册的回调将被命中并开始执行。

我想知道另一个进程(处理鼠标移动)如何在我的进程中调用一个函数?当这样的回调被击中时,我的进程状态会发生什么。我的意思是我的程序在回调被击中时正在做某事。所以它只是停止这样做并开始执行回调或什么?回调函数完成执行后会发生什么?在回调被击中之前,我的程序是否会回去做它做的任何事情?

1 个答案:

答案 0 :(得分:1)

几乎所有的GUI程序都运行某种形式的event/main loop。也就是说,作为main()的最后一部分,它进入一个循环,循环从OS读取事件,并将这些事件分派给你的回调处理程序,并执行其他任务来实现GUI。

即。您在// have a lot of functions which keep calling each other中拥有的代码是不可能的,除非您在单独的线程中执行此操作。您自己的执行流程不会被其他进程停止并接管。

GUI程序或多或少是这样做的:

#include <os_specific_ui.h>
void func_to_be_called_on_mouse_down(void)
{
 print("my_button got clicked");
}
int main()
{
 // Create a button using os specific API
 object my_button = add_button("I am a button"); 

 // Register for a mouse down call back on that button
 mouse_down_handler = register_mouse_down_cb(my_button, func_to_be_called_on_mouse_down);

    for (;;) {
       Event e 
       read_event_from_OS(&e);
       handle_event(&e);
    }
}

read_event_from_OS()获取鼠标/键盘/重绘/等等。来自操作系统的事件,handle_event()确定如何处理该事件,例如重绘窗口,或调用程序已注册的回调函数之一。

如果您正在处理的操作系统有不同的用途,那么您必须告诉我们更多相关信息

相关问题