社区
C语言
帖子详情
一个程序进程间的切换
sunnyqboy
2009-02-19 11:59:46
最近做一个程序,用curses编写。程序有界面,要求在一个窗体录入的时候,可以切换到另外一个窗体,启动改程序中的查询模块,查询完毕之后又可以切回来,继续做该录入,如何实现?
如果直接用界面保存函数,如何确定回来仍在那个栏位处?
...全文
172
6
打赏
收藏
一个程序进程间的切换
最近做一个程序,用curses编写。程序有界面,要求在一个窗体录入的时候,可以切换到另外一个窗体,启动改程序中的查询模块,查询完毕之后又可以切回来,继续做该录入,如何实现? 如果直接用界面保存函数,如何确定回来仍在那个栏位处?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunnyqboy
2009-02-26
打赏
举报
回复
用了panel,出现了一个比较蹊跷的问题:如下
#include <curses.h>
#include <panel.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void initcurses();
void initwin(WINDOW **wins,int k);
void initpanel(PANEL **panels,WINDOW **wins,int k);
void set_user_ptrs(PANEL **panels,PANEL **ptrs,int n);
main()
{
int ch,i=1,j =0 ,k=2;
int start=0;
int exits=0;
int m =0;
WINDOW *wins[2];
PANEL *panels[2];
PANEL *top;
PANEL *ptrs[2];
pid_t pid;
initcurses();
initwin(wins,k);
initpanel(panels,wins,k);
set_user_ptrs(panels,ptrs,2);
box(wins[0],'.',',');
box(wins[1],'!','#');
top = panels[0];
top_panel(top);
update_panels();
doupdate();
while (ch = getch())
{
if(m < 0) m = m + 2;
m = m%2;
switch(ch)
{
case KEY_LEFT:
//top = ptrs[m];
top = panels[m];
top_panel(top);
m--;
break;
case KEY_RIGHT:
//top = ptrs[m];
//把代码换成注释部分再按左右键就不能正常切换了,为什么?
top = panels[m];
top_panel(top);
m++;
break;
case 27:
endwin();
exit(1);
}
update_panels();
doupdate();
}
endwin();
}
void initcurses()
{
initscr();
noecho();
keypad(stdscr,TRUE);
box(stdscr,'┃','━');
refresh();
}
void initwin(WINDOW **wins,int k)
{
int i;
for(i = 0;i < k;i++)
{
wins[i] = newwin(5,20,4,10);
}
}
void initpanel(PANEL **panels,WINDOW **wins,int k)
{
int i;
//for(i = (k-1);i >= 0;i--)
for(i = 0;i < k;i++)
{
panels[i] = new_panel(wins[i]);
}
}
void set_user_ptrs(PANEL **panels,PANEL **ptrs,int n)
{
int i = 0;
if((i + 1) == n)
ptrs[i] = panels[0];
else
ptrs[i] = panels[i+1];
}
waizqfor
2009-02-25
打赏
举报
回复
[Quote=引用楼主 sunnyqboy 的帖子:]
最近做一个程序,用curses编写。程序有界面,要求在一个窗体录入的时候,可以切换到另外一个窗体,启动改程序中的查询模块,查询完毕之后又可以切回来,继续做该录入,如何实现?
如果直接用界面保存函数,如何确定回来仍在那个栏位处?
[/Quote]
设置焦点函数 然后保存的时候记录当前位置
Dinelgua
2009-02-25
打赏
举报
回复
切之前 记录到文件中
沙漠里的海豚
2009-02-25
打赏
举报
回复
不懂了呵呵,up一下
Leejun527
2009-02-25
打赏
举报
回复
ncurse库里面有设置焦点的函数。具体忘了。
最好用多个面板panel来切换,这样避免界面显示混乱。
dongpy
2009-02-25
打赏
举报
回复
这是窗口焦点切换操作。
切换的时候,保存当前录入的位置即可。
进程
间
的状态
切换
点击此处阅读原文
进程
之
间
的状态
切换
。下文中以单核计算机为例。 在任意时刻下,通常只有
一个
进程
可以被加载到计算机的CPU上运行。 三状态模型 任何
一个
进程
在它的生命周期内都会处于下面三种状态,使用这三种状态可以简单描述运行在计算机上的
进程
之
间
的状态
切换
,
进程
的一生都处在这三种状态
间
相互转换。 运行态(Running):指该
进程
正在被CPU调度运行。 就绪态(Ready):指该
进程
满足被CPU调度...
进程
及
进程
间
的
切换
(操作系统)
进程
1、认识
进程
: 对于操作系统来说,
一个
任务就是
一个
进程
,本质上是正在执行的
一个
程序
。 我们可以通过查看“windows任务管理器”中的列表,我们可以完全认为在内存中的每
一个
exe文件理解为
进程
。 但是并不是
进程
与
程序
是
一个
概念,
进程
是动态的(
进程
是担当分配系统资源(CPU时
间
,内存)的实体,是具有动态特性的),而
程序
是
一个
静态的资源。
进程
:通过
程序
运行,表现在操作系统执行的,被操作...
切换
进程
切换
线程
进程
间
切换
的步骤: 1 ,保存
程序
计数其以及其他寄存器。 2 , 更新当前处于“运行态”的
进程
的
进程
控制块,把
进程
状态改为相应状态, 更新其他相关域 3 , 把被
切换
进程
的
进程
控制块移到相关状态的队列 4 , 选择另外
一个
进程
开始执行,把该
进程
进程
控制块的状态改为“运行态” 5 , 恢复被选择
进程
的处理器在最近一次
进程
切换
和线程
切换
1.
进程
切换
当有
一个
进程
a
一个
进程
b,
进程
a去cpu上运行其代码,这个运行不是无节制的,而是有
一个
时
间
片的东西会遏制运行时
间
,若
进程
a的时
间
片到了,则会被
切换
出来。 此时有两个非常重要的东西,
程序
计数器(保存
程序
即将要执行的下一条指令的地址),和上下文信息(保存寄存器当中的值即目前执行结果),二者都在task_struct结构体中。
进程
a被
切换
出后,若再次占用CPU时,从刚刚执行的代码往下运行。 ps: ...
操作系统的多
进程
组织、
进程
间
切换
用户使用计算机就是启动了一堆
进程
;用户管理计算机就是管理这一堆
进程
操作系统如何组织多个
进程
即根据PCB、根据状态形成不同的队列放在不同的位置。多个
进程
如何组织呢?用PCB放在不同的队列中(就绪、阻塞),用状态转化来推进多个
进程
的执行操作系统如何完成
进程
的
切换
调度选择下
一个
进程
,得到下
一个
进程
的PCB,把上
一个
进程
的执行现场保存起来,把下
一个
进程
的现场覆盖到CPU对应的寄存器中去。多
进程
如何交替?如...
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章