2020-11-9

今天代码进度
上午8:30-9:05 改正静态变量问题
参考:https://blog.csdn.net/qq_37059483/article/details/81662359
需要在类的声明中写出static int a;然后在调用了这个的外部(如:调用了的main.cpp中初始化,格式为<数据类型><类名>::<静态数据成员名>=<值>

1、静态数据成员在定义或说明时前面加关键字static。//静态变量的定义

2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

<数据类型><类名>::<静态数据成员名>=<值> //静态变量的初始化

这表明:
(1) 初始化在类体外进行,而前面不加static,(这点需要注意)以免与一般静态变量或对象相混淆。

(2) 初始化时不加该成员的访问权限控制符private,public等。

(3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

4、引用静态数据成员时,采用如下格式:

<类名>::<静态成员名> //静态变量的使用方式

如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。

//中间划水了一会
9:10-9:25 新窗体(QMessageBox)打开后不显示
参考:https://blog.csdn.net/zhouyingge1104/article/details/94977016

在Qt这套逻辑中, 在add()方法内部定义的窗体,它也是个局部变量,方法结束就没了(WinForm中不是这样的). 上述链接的问答中,说是这个窗体是在栈内存中创建的, 应该要堆内存中创建.或者更好的办法是,把窗口声明为这个类的成员.

9:26- 实现suspendButton的槽函数

改正job_scheduler报错的问题

10:21 出大问题。之前以为ready,running和suspended在一个数组里;现在发现人不能,也不应该 这样搞是搞不对的。
10:34 管他呢。PCB设置状态的目的不就是区分嘛。我之前做的我觉得可以。只要在点击挂起时找到focus的item,然后转移一下item的位置(从一个ListView转到另一个;后台只需要改一下状态就好。但是状态怎么改变呢,怎么确定是哪个元素呢?从API里可以找到两个获取焦点对应的item的性质:text(内容,QString)和index(在view里的)。而且挂起就是把running里的转到suspended.这个很简单,running只有一个元素;而解挂则是把suspended里的转到ready队列里面。

怎么总是溜号呢。。。
刚刚应该是如果了解一下PCB指针的具体工作原理,可能做实验就会简单点了。

11:20我可以把PCB里面再加一个变量“sequence”,入队的时候按顺序递增,出来的时候先出小的。

7:00pm继续写。
上午的想法不可行。因为像刚才说的,后台还是无法确定要把哪个进程的status设为SUSPENDED。所以我打算提取出item的text里面的第五、六个字符(ID: 15),然后toInt()一下,这样就能确定是哪个进程被挂起了。

先通过item.text()拿到内容text(QString),然后text.split(" ")分成一个QStringList,取QStringList index为1的元素就是要的ID了。

    QString text = item->text();
    QStringList list = text.split(" ");//ID:|PID|...
    int intID = list[1].toInt();

输出了一下,是正确的。很开心!早上没有直接上手就是以为还要弄正则表达式之类的才可以,后来发现QString是真的好用o.o

7:30挂起和解挂应该是可以了,但是还不能确定。现在需要解决程序在第二次作业调度时候垮掉的问题。
7:34解决了。可能是因为我把几个backupNode的指针的声明和定义都放在了循环里,就出现了问题。在头文件里声明之后成功运行了。挂起和解挂应该没有问题。但是也有了新的问题:

  • 运行一段时间之后一直是同一个进程,反复出现。我猜测可能是没有在调度的时候成功删除?这个进程ID是37,并不是开头或者结尾的。而且之前的那些也都删除成功了。

//运行的时候尝试了一下add,是正常的。而且挂起解挂也是可以多个。

7:43还有一个问题:

  • running队列里显示的那个进程剩余时间以及优先级不是不断刷新的。只有在被换下去到队列里,或者被挂起然后解挂的时候才有效。
    7:51那我先解决这个问题吧。

  • 刚才使劲点挂起想把37号都找到,出现了一个问题:可能是太快了,我挂起了四个的同时ready队列里面有三个,然后程序崩溃了。这也属于程序不够完善。图形化界面的时候郁老师讲需要能够应对用户的疯狂点击之类的,因为如果都是新手用户,都疯狂点击一下,程序都崩了那这个软件也没什么意义。

新的错误:如果在没有选中的时候点unsuspend按钮,就会崩掉。这个很好解决,加一个判断就好。
8:01 这个判断还不太好写,因为不能判断currentRow()==NULL。
8:20 解决了。刚才的判断是currentRow,看了一下文档是返回int,改成了currentItem,就可以判断NULL了。

9:39 划水到现在。
10:16 问题解决了。可以正常运行了。刚才卡在37,是因为37是第一个使用主动的cpu调度的,可能有些代码错误没改正。复制过来就好了。

10:19 开始美化界面。记录一下现在的:
初始23:27 修改过后的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值