我正在编写一个异步执行IO的库。不同类型的GUI将使用此库来创建相同的应用程序,但适用于不同的平台。该库生成GUI要使用的事件。该库是用Rust编写的,但我设想它有一个C接口,GUI将提供一些内存和调用初始化函数。
答案 0 :(得分:1)
您可以为库提供post_event
功能。每当一个事件发生在库想要发布到GUI时,它就会调用这个函数。
post函数可能是阻塞(它在处理完事件后返回)或非阻塞(它只是在GUI的消息循环中发布事件并立即返回)。或者它可能阻止某些事件而不是其他事件。
举个例子:
用户调用库初始化:
int post_event(int eventID, long prm1, long prm2); // prototype
myLibInit(post_event); // call
内部库初始化:
static int (*libPostEvent)(int eventID, long prm1, long prm2); // global variable with pointer to user's post function
void myLibInit( int(*f)(int,long,long)) {
libPostEvent= f;
}
库中的事件发生器
...
switch (libPostEvent(eventID, prm1, prm2)) {
case ... // handle result
}
内部GUI:
int post_event(int eventID, long prm1, long prm2)
{
switch (eventID) {
case EVENT1: putmsgqueu(EVENT1, prm1); return 1; // non-blocking
case EVENT2: return(do_something()); // blocking
}
return 0; // not handled
}