10.qml使用 shadereffect 实现高斯模糊
目录
- 高斯模糊
- sigma获取
- 加权均值获取
- 高斯二维公式实现
- 高斯一维公式实现
- 使用
- 总结
高斯模糊
高斯模糊应用领域我就不过多讲解,想了解自己去了解
高斯模糊有
一维公式
二维公式
当然我们图像是二维的
但是实际上二维公式用于计算那是消耗大量的算力的,所以往往
通过执行水平方向的一维 跟 垂直方向上的一维公式进行处理的
废话不多说,qml怎么实现搞图像处理效果呢?
import QtGraphicalEffects 1.15
直接使用官方提供的GaussianBlur就可以了, 但是本章不是将怎么用这个
而是怎么用shadereffect 实现 自己的MGaussianBlur.qml
通过设置其属性
source要处理的对象,radius模糊半径
sigma获取
sigma = (radius * 2 + 1) *0.5
加权均值获取
[(模糊半径*2 + 1)上的每个像素 * 各自权重)] 的 累加值 / 总权重值
高斯二维公式实现
MGaussianBlur.qml
import QtQuick 2.12
import QtQuick.Window 2.12Item {id: controlproperty int radius: 2property var sourceproperty color color: "#00ff00"property bool cache: true //缓存property bool alphaOnly: false //只用透明度, 则color生效property bool surround: true //环绕对象// 缓存输入对象ShaderEffectSource {id: proxySourcesourceItem: control.sourcehideSource: falsesmooth: truevisible: falsesourceRect: surround? Qt.rect(-control.radius,-control.radius,parent.width + 2* control.radius,parent.height+ 2* control.radius):Qt.rect(0, 0, 0, 0)}// 缓存模糊后对象ShaderEffectSource{anchors.fill: blursourceItem: blurhideSource: visiblesmooth: truevisible: cache}ShaderEffect{id: blurx: surround? -control.radius: 0y: surround? -control.radius: 0width: surround? parent.width + 2*control.radius: parent.widthheight: surround? parent.height + 2*control.radius: parent.heightproperty Item source: proxySourceproperty real qt_Radius: control.radius //扩散半径property real qt_sigma: (2.0 * control.radius + 1.0) * 0.5property vector2d qt_Size : Qt.vector2d(width,height);property real qt_pi: Math.PIproperty bool qt_AlphaOnly: control.alphaOnlyproperty vector4d qt_Color: Qt.vector4d(control.color.r,control.color.g,control.color.b,control.color.a)fragmentShader: "#define pow2(x) (x * x)varying vec2 qt_TexCoord0;uniform sampler2D source;uniform float qt_Radius;uniform float qt_sigma;uniform float qt_pi;uniform vec2 qt_Size;uniform vec4 qt_Color;uniform bool qt_AlphaOnly;float gaussian(vec2 i) {return 1.0 / (qt_pi * pow2(qt_sigma)) * exp(-((pow2(i.x) + pow2(i.y)) / (2.0 * pow2(qt_sigma))));}void main() {vec4 color;float total = 0.0;float weight;vec2 offset;vec2 scale = vec2(1.0) / qt_Size;vec2 texCoord = qt_TexCoord0;for (float x = -qt_Radius; x <= qt_Radius; x++) {for (float y = -qt_Radius; y <= qt_Radius; y++) {offset = vec2(x,y);weight = gaussian(offset);color += texture2D(source, texCoord + offset * scale) * weight;total += weight;}}color = color / total;if(qt_AlphaOnly && color != vec4(0.0)){gl_FragColor = vec4(qt_Color.rgb,color.a);}else{gl_FragColor = color;}}"}}
高斯一维公式实现
import QtQuick 2.12
import QtQuick.Window 2.12Item {id: controlproperty int radius: 2property var sourceproperty color color: "#00ff00"property bool cache: true //缓存property bool alphaOnly: false //只用透明度, 则color生效property bool surround: true //环绕对象// 缓存输入对象ShaderEffectSource {id: proxySourcesourceItem: control.sourcehideSource: falsesmooth: truevisible: falsesourceRect: surround? Qt.rect(-control.radius,-control.radius,parent.width + 2* control.radius,parent.height+ 2* control.radius):Qt.rect(0, 0, 0, 0)}// 缓存模糊后对象ShaderEffectSource{anchors.fill: vertical_BlursourceItem: vertical_BlurhideSource: visiblesmooth: truevisible: cache}ShaderEffect{id: horizontal_Blurx: surround? -control.radius: 0y: surround? -control.radius: 0width: surround? parent.width + 2*control.radius: parent.widthheight: surround? parent.height + 2*control.radius: parent.heightproperty Item source: proxySourceproperty real qt_Radius: control.radius //扩散半径property real qt_sigma: (2.0 * control.radius + 1.0) * 0.5property vector2d qt_Size : Qt.vector2d(width,height);property real qt_pi: Math.PIproperty bool qt_AlphaOnly: control.alphaOnlyproperty vector2d qt_Direction: Qt.vector2d(1.0,0.0)property vector4d qt_Color: Qt.vector4d(control.color.r,control.color.g,control.color.b,control.color.a)layer.enabled: truelayer.smooth: truevisible: falseblending: falsefragmentShader: "#define pow2(x) (x * x)varying vec2 qt_TexCoord0;uniform sampler2D source;uniform float qt_Radius;uniform float qt_sigma;uniform float qt_pi;uniform vec2 qt_Size;uniform vec4 qt_Color;uniform bool qt_AlphaOnly;uniform vec2 qt_Direction;float gaussian(float i) {return 1.0 / sqrt(qt_pi * pow2(qt_sigma)) * exp(-pow2(i) / (2.0 * pow2(qt_sigma)));}void main() {vec4 color;float total = 0.0;float weight;float offset;vec2 scale = vec2(1.0) / qt_Size;vec2 texCoord = qt_TexCoord0;weight = gaussian(0.0);color += texture2D(source, texCoord) * weight;total += weight;for (float x = 1.0; x <= qt_Radius; ++x) {offset = x;weight = gaussian(offset);color += texture2D(source, texCoord + offset * scale * qt_Direction ) * weight;color += texture2D(source, texCoord - offset * scale * qt_Direction ) * weight;total += weight * 2.0;}color = color / total;gl_FragColor = color;}"}ShaderEffect{id: vertical_Blurx: surround? -control.radius: 0y: surround? -control.radius: 0width: surround? parent.width + 2*control.radius: parent.widthheight: surround? parent.height + 2*control.radius: parent.heightproperty Item source: horizontal_Blurproperty real qt_Radius: control.radius //扩散半径property real qt_sigma: (2.0 * control.radius + 1.0) * 0.5property vector2d qt_Size : Qt.vector2d(width,height);property real qt_pi: Math.PIproperty bool qt_AlphaOnly: control.alphaOnlyproperty vector2d qt_Direction: Qt.vector2d(0.0,1.0)property vector4d qt_Color: Qt.vector4d(control.color.r,control.color.g,control.color.b,control.color.a)fragmentShader: "#define pow2(x) (x * x)varying vec2 qt_TexCoord0;uniform sampler2D source;uniform float qt_Radius;uniform float qt_sigma;uniform float qt_pi;uniform vec2 qt_Size;uniform vec4 qt_Color;uniform bool qt_AlphaOnly;uniform vec2 qt_Direction;float gaussian(float i) {return 1.0 / sqrt(qt_pi * pow2(qt_sigma)) * exp(-pow2(i) / (2.0 * pow2(qt_sigma)));}void main() {vec4 color;float total = 0.0;float weight;float offset;vec2 scale = vec2(1.0) / qt_Size;vec2 texCoord = qt_TexCoord0;weight = gaussian(0.0);color += texture2D(source, texCoord) * weight;total += weight;for (float x = 1.0; x <= qt_Radius; ++x) {offset = x;weight = gaussian(offset);color += texture2D(source, texCoord + offset * scale * qt_Direction ) * weight;color += texture2D(source, texCoord - offset * scale * qt_Direction ) * weight;total += weight * 2.0;}color = color / total;if(qt_AlphaOnly && color != vec4(0.0)){gl_FragColor = vec4(qt_Color.rgb,color.a) * qt_Color.a;}else{gl_FragColor = color;}}"}}
使用
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Window 2.12Window {width: 640height: 480visible: truetitle: qsTr("Hello World")Column{spacing: 10Row{SpinBox{onValueModified: {blur.radius = value}}}Row{Image {id: imgwidth: 100height: 100source: "qrc:/firefox-logo.svg"}MGaussianBlur{id: blurwidth: 100height: 100source: imgradius: 4//alphaOnly: true}}}}
总结
复杂我的代码,电脑应该是正常使用的,但是qt使用的场景是多变的
所以,如果有遇到不同硬件渲染引擎的问题的可以分析到这里
相关文章:
10.qml使用 shadereffect 实现高斯模糊
目录 高斯模糊sigma获取加权均值获取 高斯二维公式实现高斯一维公式实现使用总结 高斯模糊 高斯模糊应用领域我就不过多讲解,想了解自己去了解 高斯模糊有 一维公式 二维公式 当然我们图像是二维的 但是实际上二维公式用于计算那是消耗大量的算力的,…...
2024年12月GESPC++一级真题解析
一、单选题(每题2分,共30分) 题目123456789101112131415答案 C C D B B D B C C C D C D B D 1.2024 年 10 月 8 日,诺贝尔物理学奖 “ 意外地 ” 颁给了两位计算机科学家约翰 霍普菲尔德( John J. H…...
Nmap脚本参数详解
免责声明:使用本教程或工具,用户必须遵守所有适用的法律和法规,并且用户应自行承担所有风险和责任。 文章目录 一、 按脚本分类1. 检查身份验证机制2. 探测广播行为3. 登录爆破4. 默认脚本运行5. 网络资产发现6. Dos漏洞检测7. 漏洞利用8. 检…...
Rstudio-server的安装、配置、维护
一、安装Rstudio-server (1)安装R语言: sudo apt install r-base # 如果没有管理员权限无法操作 # 这样装上R默认在/usr/bin/R其实基本上的流程都可以参考posit的官网(也就是Rstudio的官网): https://posit.co/download/rstudio…...
2024ECCV|DiffBIR: 基于生成扩散先验进行盲图像恢复
文章标题:《DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior》 DiffBIR收录于2024ECCV,是中科院深圳先进技术研究院(董超等人)、上海AI Lab和香港中文大学联合发布的一项研究。 原文链接:h…...
前端报错npm ERR cb() never called问题
环境使用node版本v14.21.3,npm版本6.14.18 1.问题描述 1.1使用npm install后报错 npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! ? ? <https://npm.community>npm ERR! A complete log…...
SLM510A系列——24V,15到150mA单通道可调电流线性恒流LED驱动芯片
SLM510A 系列产品是单通道、高精度、可调电流线性恒流源的 LED 驱动芯片,在各种 LED 照明产品中非常简单易用。其在宽电压输入范围内,能保证极高的输出电流精度,从而在大面积的光源照明中,都能让 LED 照明亮度保持均匀一致。 由于…...
VBA API 概述 / 声明 / 宏编程
注:本文为 “VBA API 概述 | 宏编程 | 执行速度慢” 相关文章合辑。 未整理去重。 VBA API 详解 Office 二次开发于 2020-12-17 22:27:10 发布 Office 版本变动 在 Office 2010 之前,微软仅提供 32-bit 版本的 Office。而自 Office 2010 起࿰…...
Python 开源项目精彩荟萃
一、Web 开发框架 Django 高效路由系统: 支持基于正则表达式的复杂 URL 模式匹配,精准定位视图函数,例如可通过r^articles/(?P<year>\d{4})/$这样的正则表达式来匹配特定年份的文章列表页面 URL,并将年份参数传递给视图函数…...
Debezium系列之:使用Debezium采集oceanbase数据库
Debezium系列之:使用Debezium采集oceanbase数据库 一、oceanbase数据库二、安装OceanBase三、安装oblogproxy四、基于Docker的简单采集案例五、生产实际应用案例Debezium 是一个开源的分布式平台,用于监控数据库变化和捕捉数据变动事件,并以事件流的形式导出到各种消费者。D…...
AI初创企业的未来趋势和潜在挑战
AI初创企业的未来趋势和潜在挑战 AI初创企业的未来趋势和潜在挑战可以从多个方面进行分析: 未来趋势 AI监管: 随着AI技术的快速发展,各国政府开始制定相关法规,以确保AI的安全和伦理使用。这将影响初创企业的运营模式和市场准入。 日常生活…...
Grafana配置告警规则推送企微机器人服务器资源告警
前提 已经部署Grafana,并且dashboard接入数据 大屏编号地址:Node Exporter Full | Grafana Labs 创建企微机器人 备注:群里若有第三方外部人员不能创建 机器人创建完成,记录下来Webhook地址 Grafana配置告警消息模板 {{ define &…...
RFDiffusion xyz_to_c6d函数解读
函数 xyz_to_c6d将给定的蛋白质主链坐标 (N,Cα,C)转换为 6D矩阵表示,即用以下几何特征描述两两残基之间的关系: 距离 dist:残基间 Cβ 原子的欧几里得距离。二面角 omega:两个残基的 Cα−Cβ 向量之间的二面角。二面角 theta:由 N−Cα−Cβ和 Cβ间向量定义的二面角。平…...
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍01
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
VSCode 报错:rust-analyzer requires glibc >= 2.28 in latest build
报错信息 /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.953/server/rust-analyzer: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.29 not found (required by /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.9…...
x2go远程控制
X2Go 优点:专为远程桌面和图形界面优化。性能优越,特别是在网络带宽较低的情况下,采用了高效的压缩和缓存技术。支持多用户、会话恢复功能,适合企业使用。使用 SSH 连接,具有较好的安全性。 安装与配置:需…...
SQL 单表查询练习题(一)
在 SQL 的学习过程中,单表查询是非常重要的基础部分,下面为大家分享一些单表查询的练习题以及对应的正确答案,希望能帮助大家更好地掌握相关知识。 一、题目及答案详情 1. 查询课程表中,没有前序课程的课程信息,查询…...
Ubuntu 安装texstudio sty与texlive
手动安装需要的包 访问CTAN网站(Comprehensive TeX Archive Network)并下载enumitem宏包: enumitem CTAN页面下载后,将宏包解压到/usr/share/texmf/tex/latex/下。 可打开texstudio/帮助/宏包帮助下载。 如果不想手动安装一个个…...
DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(一)
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
【现代服务端架构】传统服务器 对比 Serverless
在现代开发中,选择合适的架构是至关重要的。两种非常常见的架构模式分别是 传统服务器架构 和 Serverless。它们各有优缺点,适合不同的应用场景。今天,我就带大家一起对比这两种架构,看看它们的差异,并且帮助你选择最适…...
SecureCRT/FX使用[无限试用SecureCRT][新版本SecureFX双击站点总是自动跳到SecureCRT]
无限试用SecureCRT 本文摘录于:https://blog.csdn.net/qq_52162404/article/details/139703993#:~:textSecureCRT只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 我这里修改BAT如下,同时删除CRT和FX的license: echo off re…...
c++ CMakeLists.txt详解
基本结构 CMake 最低版本声明 用于指定需要的最低 CMake 版本,确保兼容性。 cmake_minimum_required(VERSION 3.10)指定 CMake 的最低版本。确保用户的 CMake 版本符合项目需求,否则报错。版本选择建议根据项目使用的功能决定。例如,3.10 引…...
树状数组详解
概述 树状数组(Binary Indexed Tree,简称BIT),是一种数据结构,用于处理区间查询和更新问题。它是一种可以高效地在对数级别时间复杂度内进行单点更新和区间查询的数据结构。树状数组通常用于解决以下两类问题…...
photoshop的2个形状-箭头
有时候用ps画一些教程类图文,需要用到箭头. 另外自己画了一个镂空的长方形和正方形 形状的路径一般在Custom Shapes文件夹内 例如 E:\photoshopCS4\Adobe Photoshop CS4\Presets\Custom Shapes...
docker 部署 redis
docker 部署 redis 1. 下载 redis 镜像 # docker images | grep redis bitnami/redis 7.2.4-debian-11-r5 45de196aef7e 10 months ago 95.2MB2. docker-compose 部署 version: "3" services:redis:image: bitnami/redis:7.2.4-debian-11-…...
如何持续优化呼叫中心大模型呼入机器人的性能?
如何持续优化呼叫中心大模型呼入机器人的性能? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 持续优化呼叫中心大模型呼入机器人的性能是一个复杂而细致的过程,它涉及到数据、模型结构…...
【01】mysql安装后MySQL Configurator无法启动的问题
安装完Mysql之后打开MySql Configurator提示MySQL Configurator Internal error.(值不能为null.参数名:input) The Configurator will now close. mysql安装后MySQL Configurator无法启动的问题 文章目录 mysql安装后MySQL Configurator无法启动的问题1.MySQL Configurator无法…...
基于单片机的血氧心率检测与报警系统(论文+源码)
1系统的功能及方案设计 本次课题为基于单片机的血氧心率检测与报警系统研制,在此设计了如图2.1所示的系统结构框图,整个系统包括了MAX30102心率血氧检测模块,DS18B20体温检测模块,液晶显示模块,按键以及主控制器stm32…...
科技潮头浪接天,一桥飞架两界连。EthernetIP转Profinet互译连
本案例介绍的是西门子1200PLC通过稳联技术PROFINET转EtherNetIP网关(WL-ABC2006)连接HCS-6100系统配置案例。 打开稳联技术Ethernetip转profient网关(WL-ABC2006)配置软件,因为网关作为EtherNetIP从站,所以选择PN2EIP。设置网关Pr…...
day11 性能测试(4)——Jmeter使用(黑马的完结,课程不全)直连数据库+逻辑控制器+定时器
【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、复习 1.1 断言(3种) 1.2 关联(3种) 1.3 录制脚本 2、Jmeter直连数据库 2.1 直连数据库——使用场景 2.2 直连数据库——操作步骤 2.2.1 案例1&…...
如何使用 Python 读取文本文件?
在Python编程中,读取文本文件是一项基本且重要的操作。 无论是处理日志文件、配置文件,还是进行数据分析,都需要用到这一技能。 下面,我将详细介绍如何使用Python读取文本文件,并提供一些实际开发中的建议和注意事项…...
11. qml ShaderEffect实现阴影效果
目录 MDropShadow.qml使用 MDropShadow.qml 基于上一章所制作的MGaussianBlur.qml 开发 MDropShadow阴影效果 import QtQuick 2.12Item {id: controlproperty var source;property real radius: 4property bool cached: falseproperty int offsetX: 0property int offsetY: 0…...
故障013:易忘的NULL表达式
故障013:易忘的NULL表达式 一、问题引入二、探索之路2.1 数据准备2.2 回顾NULL表达式2.3 重现问题2.3.1 分析原因2.3.2 如何化解预期? 三、知识总结 一、问题引入 某单位开发人员理直气壮抛出一张截图,以红色醒目地标记问题,好似…...
基于nginx和ffmpeg搭建HTTP FLV流媒体服务器
一、简介 整体是使用nginx搭建HTTP FLV流媒体服务器: 流程:音视频->rtmp->http-flv 音视频转为rtmp需要借助ffmpeg转化。 rtmp转为http-flv需要借助nginx转化。 nginx-http-flv-module是基于nginx-rtmp-module开发的,包含nginx-rt…...
【人工智能】用Python构建高效的自动化数据标注工具:从理论到实现
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 数据标注是构建高质量机器学习模型的关键环节,但其耗时耗力常成为制约因素。本篇文章将介绍如何用Python构建一个自动化数据标注工具,结合机器学习和NLP技术,…...
MVC基础——市场管理系统(四)
文章目录 项目地址六、EF CORE6.1 配置ef core环境6.2 code first6.2.1 创建Database context1. 添加navigation property2. 添加MarketContext上下文七、Authentication7.1 添加Identity7.2 Run DB migration for Identity7.3 使用Identity7.3.1 设置认证中间件7.3.2 设置权限…...
多模块应用、发布使用第三方库(持续更新中)
目录: 1、多模块概述(HAP、HSP、HAR) HAR与HSP两种共享包的主要区别体现在: 2、三类模块: 3、创建项目:项目名:meituan (1)创建Ability类型的Module,编译后为HAP文件…...
MVP模式的理解和实践
MVP(Model-View-Presenter)模式是一种用于组织代码的架构模式,主要用于用户界面的开发。它通过将应用程序的三个主要组件分开,提高了应用的可维护性和可测试性。本文将详细介绍MVP模式的理解和实践,并通过Java语言提供…...
开启第二阶段---蓝桥杯
一、12.10--数据类型的范围及转化 今天是刚开始,一天一道题 对于这道题我想要记录的是Java中的整数默认是 int 类型,如果数值超出了 int 的范围,就会发生溢出错误。为了避免这个问题,可以将数字表示为 long 类型,方法…...
Linux 网络流量控制 - 实现概述
摘要 Linux 提供了一整套丰富的流量控制(traffic control)功能。本文档概述了相应的内核代码设计,描述了其结构,并通过描述一种新的排队策略来说明新元素的添加。 1 引言 最近的Linux内核提供了多种流量控制功能。Alexey Kuznetsov(kuznet…...
分布式 Raft算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & Raft算法 & 总结》《分布式 & Raft算法 & 问题》 参考文献 《Raft一致性算法论文译文》《深入剖析共识性算法 Raft》 简介 Raft 木筏是一种基于日志复制实现的分布式容错&一致性算法。在Raft算法…...
【前端面试题】变量提升、闭包、promise
飞书面试 题目1: async function foo() {console.log(foo start);await bar();console.log(foo end); }async function bar() {console.log(bar start);return new Promise((resolve, reject) > {setTimeout(() > {console.log(bar promise);resolve();}, 1…...
UE5安装Fab插件
今天才知道原来Fab也有类似Quixel Bridge的插件,于是立马就安装上了,这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎,在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…...
数据分析思维(一):业务指标(数据分析并非只是简单三板斧)
个人认为,数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#x…...
linux下socket本地套接字通讯
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。socket进程通信与网络通信使用的是统一套接口,只是地址结构与某些参数不同。 用途 进程间通信:本地套…...
vmcore和kdump
在Linux系统中,vmcore是指内核崩溃时生成的内存转储文件。这个文件包含了系统崩溃时的内存状态,可以用于分析和诊断内核崩溃的原因。分析vmcore文件通常需要使用专门的工具和方法。以下是关于vmcore的一些关键点: 生成vmcore Kdump…...
[线段树] 回转寿司
题目描述 酷爱日料的小 Z Z Z 经常光顾学校东门外的回转寿司店。在这里,一盘盘寿司通过传送带依次呈现在小Z眼前。 不同的寿司带给小Z的味觉感受是不一样的,我们定义小 Z Z Z 对每盘寿司都有一个满意度。 例如小 Z Z Z 酷爱三文鱼,他对…...
RobotFrameWork详解-RF框架脚本测试集成
Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。 之前讲过很多RF框架的内…...
【操作系统】实验八:添加/proc文件系统
实验八 添加/proc文件系统 8.1 实验目的 通过加载内核模块,为/proc文件系统创建以下内容: 一个名叫proc_test的子目录。 一个名叫current的文件,只读,读出的内容是读它的进程的情况。 一个名叫current_too的链接,…...
操作系统(8)死锁
一、概念 死锁是指在一个进程集合中的每个进程都在等待只能由该集合中的其他进程才能引起的事件,而无限期地僵持下去的局面。在多任务环境中,由于资源分配不当,导致两个或多个进程在等待对方释放资源时陷入无限等待的状态,这就是死…...