Windows操作系统是由微软公司(Microsoft)开发的一款图形操作系统,它以其强大的功能和广泛的用户基础,成为了目前世界上用户使用最多、兼容性最强的操作系统之一。以下是关于Windows操作系统的详细介绍:
Windows操作系统具有多种核心功能,这些功能共同构成了其强大的计算机使用体验:
操作系统是硬件上面第一层软件,直接与硬件交流,在操作系统中安装了很多的软件,也就是所谓的程序,程序是静态的指令。它只占系统磁盘的空间。执行以后,变成进程,占系统内存。
程序的编译过程通常包括四个主要阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。下面将详细解释每个阶段的作用和主要任务。
作用:
预处理是编译过程的第一步,它主要处理源代码中的预处理指令(如#include、#define等),并准备源代码以便后续的编译阶段。
主要任务:
示例:
使用GCC编译器时,可以通过gcc -E main.c -o main.i
命令生成预处理后的文件(.i文件)。
作用:
编译是将预处理后的源代码转换成汇编代码的过程。
主要任务:
示例:
使用GCC编译器时,可以通过gcc -S main.i -o main.s
命令生成汇编代码文件(.s文件)。
作用:
汇编是将汇编代码转换成机器码(二进制指令)的过程。
主要任务:
示例:
使用GCC编译器时,可以通过gcc -c main.s -o main.o
命令生成目标文件(.o文件)。
作用:
链接是将多个目标文件以及所需的库文件合并成一个可执行文件的过程。
主要任务:
示例:
使用GCC编译器时,可以通过gcc main.o -o main
命令将目标文件链接成可执行文件(main)。
综上所述,程序的编译过程是一个复杂且系统的过程,它涉及多个阶段和多个方面的知识和技术。通过这个过程,高级语言编写的源代码被转换成计算机可以直接执行的机器码。
widget.h
#ifndef WIDGET_H #define WIDGET_H #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); public: void showProcess(); private slots: void on_pushButton_clicked(); private: Ui::Widget *ui; }; #endif // WIDGET_H
widget.cpp
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //显示所有的进程 showProcess(); } Widget::~Widget() { delete ui; } void Widget::showProcess() { //显示所有的进程 PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32)}; //1.获取操作系统的进程的链表,快照 HANDLE hsnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if( INVALID_HANDLE_VALUE == hsnapShot)return; //2.获取链表的头 bool bflag = Process32First(hsnapShot,&pe); //Qt 垃圾自动回收机制---- 对象树 QString str; int i =0; while(bflag){ //进程名称 str = QString::fromWCharArray(pe.szExeFile); ui->tableWidget->setItem(i,0,new QTableWidgetItem(str)); //进程id str = QString::number(pe.th32ProcessID); ui->tableWidget->setItem(i,1,new QTableWidgetItem(str)); //线程数 str = QString::number(pe.cntThreads); ui->tableWidget->setItem(i,2,new QTableWidgetItem(str)); //3.遍历链表 bflag = Process32Next(hsnapShot,&pe); ++i; } } void Widget::on_pushButton_clicked() { //获取进程id int nRow = ui->tableWidget->currentRow(); if(nRow == -1)return; QTableWidgetItem *pitem = ui->tableWidget->item(nRow,1); //获取句柄 int nProcessId = pitem->text().toInt(); HANDLE hProcess= OpenProcess(PROCESS_TERMINATE,0,nProcessId); //结束进程 if(hProcess){ TerminateProcess(hProcess,-1); ui->tableWidget->removeRow(nRow); } }