嵌入式Linux下基于MiniGUI的信息终端软件开发
return FALSH;
return RegisterListenFD(listen_fd,POLLIN,hwnd,NULL);
}
服务器监听该套接字listen_fd。当客户有连接请求时,服务器的过程函数中就会收到MSG_FDEVENT消息,服务器就可以接受该请求以进行相应处理:
static int MainFunProc(HWND hWnd,
{ switch(message)
{case MSG_FDEVENT:
if(LOWORD(wParam)= =listen_fd){
……
conn_fd=serv_accept(listen_fd,&uid);
if(conn_fd>0){
sock_read(conn_fd,buff[20],40);
……
sock_write(conn_fd,buff[20],40);
}}
break;
}}
在主界面进程中,需要连接到服务器时,可以通过cli_conn(LISTEN_SOCKET,'b')来提出请求。
这样,服务器和客户程序之间即可相互交流数据了。
广告进程实现时,需要在服务器中设置事件钩子函数SetServerEventHook(my_event_hook)。因为广告屏保是在没有键盘鼠标输入的一段时间后自动打开的,有任意键时又自动关闭,所以只有始终运行在后台的服务器才能判断广告是否要打开关闭。
可以在消息循环时进行判断:
while(GetMessage(&Msg,HWND_DESKTOP))
{if (pid_scrnsaver= =0&&GetTickCount()>
old_tick_count+1000){
ShowCursor(FLASE);
pid_scrnsaver=exec_app("./scrnsaver","crnsaver");
}
DispatchMessage(&Msg);
}
dld_tick_count是前一次消息的时间。当从GetTickCount()得到的当前时间大于设定值时,还没有任何消息的话,广告屏保scrnsaver程序就启动,同时隐蔽鼠标光标。
当系统又接收到事件时,会自动执行前面注册过的事件钩子函数。在该函数中,使用kill(pid_scrnsaver,SIGINT)命令关闭广告程序,并显示鼠标即可。
软件系统的示意如图2所示。
将完成的C语言程序文件用交叉编译工具编译,并链接MiniGUI库文件,即可生成所需的可执行文件。
《嵌入式Linux下基于MiniGUI的信息终端软件开发(第4页)》