线程起步,解决一个过程只能进行一次画图的问题

SolidWorks高效学习:从安装到出图的完整工作流与高频问题解决 计算机辅助设计(CAD)是现代工业产品研发的核心工具,其原理是通过参数化建模技术,将设计意图转化为精确的数字化模型。掌握CAD软件不仅能提升设计效率,更能确保从概念到制造的数据准确传递。对于工程师和设计师而言,构建一套从零件建模、装配体设计到工程图输出的完整工作流思维,是发挥软件技术价值的关键。在实际应用中,草图约束逻辑、装配体配合以及工程图关联等环节常成为技术瓶颈。本文聚焦于SolidWorks这一主流CAD平台,深入解析如何规避安装许可(如-85440错误)、处理STP/STEP格式数据交换以及优化硬件 阅读详情

前言

检查自己是否真正熟练掌握了一项技能就是看自己能否将这项技能讲给别人听,并让不会这项技能的人也掌握这项技能,所以我今天尝试着把线程这一块儿讲明白

如何理解线程

想象一下车站的售票处,一个窗口可以进行多项处理,你可以买票,也可以换票退票。如果车站只有一个服务窗口,而又有买票和换票两类业务需要处理,那么我们要么只能买票,要么只能换票。但如果加了另外一个窗口,我们就可以同时进行买票和换票的业务。线程即是如此,即同时解决多个问题,不再是一次只能解决一个问题。

接下来我会用画图板来展示一下线程的具体功能和效果。

无线程的画图效果

写好基本的界面后(界面之前写过了画图板),我们加上监听器,其中的内容如下:

public void actionPerformed(ActionEvent e) {
		int x = 0, y = rand.nextInt(1080);
		for (int i = 0; i < 100; i++) {
			g.drawOval(x+i, y, 40, 40);
			try {
				Thread.sleep(30);
			} catch (Exception e2) {
			}
		}
	}

我将这个动作监听器加到了按钮上,即点一下按钮就绘制,中间加了暂停,即try {
Thread.sleep(30);
} catch (Exception e2) {
}
表示每30ms暂停一下,这样就会有动态的感觉
在这里插入图片描述
我们可以明显的看到,第一次按下按钮以后,会有黑线冒出来,但是连续点击两下,只有等到第一条黑线完全加载完毕才会去加载第二条黑线,这不是我们希望得到的效果,
那么如何让两条甚至多条线同时加载?这就要用到线程

加上线程后的效果

首先创建一个线程类,让其继承Thread

public class fly_thread extends Thread

写构造器,让画布传过来

Graphics g;
	public fly_thread(Graphics g) {
		this.g=g;
	}

最后重写run()方法

Random rand = new Random();
public void run() {
		super.run();
		int x = 0, y = rand.nextInt(1080);
		for (int i = 0; i < 100; i++) {
			g.drawOval(x+i, y, 40, 40);
			try {
				Thread.sleep(30);
			} catch (Exception e2) {
			}
		}
	}

这时候线程就添加完毕了,然后我们只需要在原来的监听器里启动线程就OK了

public void actionPerformed(ActionEvent e) {
		MyThread myth=new MyThread(g);
		myth.start();
	}	

点击一次就启动一个线程,这样就可以同时画出线条了
在这里插入图片描述
如雨后春笋一般冒出

UE5数字人表情驱动进阶:突破ARKit标准实现自定义夸张表情 在数字人表情驱动领域,ARKit标准提供了52个基础混合形状参数,为真实人脸表情捕捉与驱动建立了通用框架。其原理是通过面部识别算法提取肌肉运动数据,映射到预定义的变形目标上,实现写实表情同步。这项技术的核心价值在于为虚拟角色提供了标准化的表情控制接口,广泛应用于虚拟直播、游戏角色动画和影视预演等场景。然而,标准参数在表现卡通式、奇幻式等超越生理极限的夸张表情时存在局限。本文聚焦于如何利用LiveLink原始数据流,通过自定义算法驱动专属的夸张表情,其中涉及变形目标映射、数据流拦截和实时插值等关键技术,为数字 阅读详情

相关推荐

基于python的排课表系统,用python编写排课系统

实现一个具体的课程管理系统。(5) 学生可以查看自己选上的课的成绩,以及各个课程的得分、绩点,并给出其平均绩点,但不允许查看年级其他人的成绩。(2) 学生定制专属课表,可以查看整个学期本人的课程安排,包括课程名称、上课时间、上课地点、任课老师、学分等等。(13) 系主任可以查看整个系的全部学生以及他们的平均绩点,可以对每个班进行排名,或者也可以对整个系进行排名。(15) 系主任可以查看整个学期所开设的所有课程,包括这些课程的全部详细信息。(1) 学生基本信息的查询,学生可以对本人的系统登陆密码进行修改。

yang0728y的博客 2000

从PDF扫描到数字工程:跨越数据木乃伊与数字孪生的鸿沟

数字化(Digitization)是将物理信息转化为电子格式的基础过程,而数字化(Digitalization)则进一步利用数字技术优化业务流程。数字工程(Digital Engineering)是这一演进的高级阶段,其核心是以模型为中心(Model-Centric),构建可计算、可仿真的数字孪生。与仅实现信息存储介质转换的PDF扫描不同,数字工程通过结构化数据、参数化模型和数字线程(Digital Thread),赋予数据真正的“灵魂”,使其具备可检索、可编辑、可计算和可追溯的能力。这种从静态文档到动态模

weixin_30301449的博客 370

从零开始:使用英伟达nx开发板部署目标检测算法的全过程

英伟达nx开发板烧录、依赖安装、开发板联网

weixin_51192760的博客 3762

OpenCv 从线程中显示图像问题

在做摄像头拍摄视频时,用OpenCv外开一个线程用于显示摄像头捕获到的图像时,发现线程关闭之后再次打开线程,没有办法再次显示图像 开线程部分的代码如下,主线程通过控制ctr来控制线程关闭。 VideoCapture cap(0); Mat frame; std::thread cap_th( [&ptr_camera]() { ctr = true; while (ctr)

benobug的博客 811

MT25QL256完整操作指南:从ID读取到4KB扇区擦除(附华大SPI例程)

本文提供了MT25QL256 NOR FLASH在华大MCU上的完整驱动开发指南。内容涵盖从SPI初始化、器件ID读取、状态寄存器查询,到核心的页编程和4KB扇区擦除操作,并分享了构建健壮驱动框架、处理跨页写入及常见调试问题的实战经验。

tt34567的博客 887

Ubuntu安装pytorch3d的最便捷方法【原创】

Ubuntu安装pytorch3d的最便捷方法

qq_54900679的博客 2924

多线程绘图

在线程中绘图可分为两个步骤,即划分子线程以及在线程中绘图。 创建子线程的过程如下: 首先先建立一个子线程的类,再在主窗口类中定义子线程对象。使用moveToThread方法移动到子线程而不用run进入。 在调用start()开启线程后就可以在子线程中绘制想要的图形创建一个自定义线程类(可以用信号与槽的方式进入线程以及从子线程中输出相应的信息给主线程)。 本次程序主要是完成在窗口点击鼠标从而在点击的点中显示在子线程所绘制的图片。 Widget::Widget(QWidget *parent) : QW

weixin_38516302的博客 2738

用例设计:滴滴打车从轿车到完成支付如何测?

滴滴打车全流程测试用例设计从业务场景覆盖、功能逻辑分解、异常流验证三个维度展开,系统化地构建了测试方案。首先,业务流主干场景被分解为叫车、行程中、支付结算三个阶段,每个阶段都设计了核心测试用例,包括正向和异常用例,如定位准确性、车型选择逻辑、路径偏移监控、费用实时计算、多支付方式兼容等。专项测试补充了状态机验证、资损防控测试和性能测试,确保系统在不同情况下的稳定性和安全性。测试数据策略采用等价类划分设计,实战技巧包括流量回放技术、混沌工程注入和计费沙盒验证,以提高测试的覆盖率和准确性。最终输出交付物包括流程

海姐软件测试的博客 1524

[特殊字符] Meixiong Niannian画图引擎Prompt缓存:Redis加速高频提示词响应方案

本文介绍了如何在星图GPU平台上自动化部署🎨 Meixiong Niannian 画图引擎镜像,通过集成Redis缓存机制加速高频提示词的文本编码过程,显著提升AI图片生成响应速度——典型应用于中文Prompt反复调试、风格化图像批量产出等创作场景,端到端耗时降低至1.4秒。

weixin_42518874的博客 913

基于pytorch cnn ResNets卷积网络的模糊图像检测 完整代码数据直接运行

基于pytorch cnn ResNets卷积网络的模糊图像检测 完整代码数据直接运行

730

滑模控制算法(SMC)讲解-案例(附C代码)

该文章介绍了滑模控制算法的原理实现步骤,特点及关键问题,最后以车辆控制案例来讲解滑模控制的整个步骤实现

heda3的博客 4111

Meixiong Niannian画图引擎入门必看:WebUI响应时间优化与缓存策略

本文介绍了如何在星图GPU平台上自动化部署🎨 Meixiong Niannian 画图引擎镜像,显著优化WebUI响应速度。通过模型常驻、LoRA预加载与Prompt哈希缓存等策略,实现秒级图像生成,适用于AI绘画创作、设计素材快速产出等典型场景。

weixin_42113456的博客 85

SimSwap复现指引及代码分析【2023有更新】

我的环境!!!😚😚😚 之后会遇到:还会遇到至此环境配置完毕!下面是所需要的checkpoint。至此环境准备结束。先试试环境是否有问题,图片是代码包中给的。我用的是512的checkpoint,无水印,a是源脸,b是目标脸。输出到./output/result_whole_swapsingle.jpg 如图是可以成功换脸的:(为了方便查看将图像裁剪到了128x128) 表示图像预处理,相应的改为也是一样。不加就是对已经面部对齐的图像进行简单的面部交换。 加上就是无水印。 交换一张图片中的所有面孔。

zik的博客 2048

鸿蒙应用 CPU 使用率过高怎么办?从 Profiler 到落地优化的完整思路

摘要 本文系统阐述了鸿蒙应用开发中CPU使用率优化的核心思路与方法。针对页面复杂度提升后常见的CPU占用过高问题,提出从定位、优化到场景适配的三步解决方案。关键点包括:使用Profiler精准定位问题源头,通过Worker线程分离计算任务,控制UI刷新频率,采用LazyForEach优化列表性能,以及正确处理动画和图片资源。文章结合ArkTS代码示例,详细说明了设备状态面板、大数据列表等典型场景的优化策略,强调"合理调度优于单纯提速"的优化理念,为开发者提供了一套完整的CPU性能优化方法

m0_74456227的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

用STM32搭建低成本功耗分析采集系统

功耗分析是侧信道攻击与嵌入式安全研究的基础,通过采集芯片运行时电流的细微波动,可揭示内部数据处理与密钥的关联。传统方案依赖昂贵示波器或专用设备,门槛高且难以自动化。本文从电流到电压的变换原理出发,介绍如何利用普通MCU、采样电阻与运放构建一套低成本、可自动化的功耗轨迹采集系统。内容涵盖采样电阻选型、运放增益设计、ADC触发与DMA双缓冲、触发同步机制等关键工程细节,并给出实测波形与SNR评估方法。该系统适用于SPA/DPA分析验证、低功耗设备电流观察及侧信道入门研究,帮助开发者在有限预算下获得干净、可重复的

weixin_34268579的博客 463

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring 5/6新特性概述

摘要: Spring 5(2017)和Spring 6(2022)是两大里程碑版本。Spring 5以响应式编程(WebFlux)、Kotlin支持和JUnit 5集成为核心,解决高并发和现代Java开发痛点。Spring 6则全面拥抱云原生,支持GraalVM Native镜像(启动快至0.3s)、虚拟线程(Loom)和可观测性(Micrometer),最低要求Java 17+。升级时需注意Java 8→17和javax→jakarta迁移。实际应用中,Spring 5适合高并发改造,Spring 6是云

m0_57545130的博客 1094

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java面试核心考点:JVM、HashMap与SpringBoot解析

Java作为企业级开发的主流语言,其底层原理和框架设计是面试考察的重点。JVM内存管理涉及堆、栈、方法区等核心区域,通过分代垃圾回收机制实现自动内存管理,直接影响应用性能。HashMap作为高频使用的数据结构,在JDK1.8引入红黑树优化哈希冲突,其扩容机制和线程安全问题值得深入理解。SpringBoot通过自动配置和起步依赖简化了Spring框架的复杂性,内嵌容器和Actuator监控进一步提升了开发效率。掌握这些核心技术点,不仅能应对大厂面试,更能提升日常开发中的问题排查和系统优化能力。

weixin_34237941的博客 243

调试技术能够让新技术的学习事半功倍

调试技术能够让新技术的学习事半功倍我是WPF菜鸟。我要学WPF。一种方法,是根据推荐的书籍,按照书籍的步骤,从Hello World开始,循序渐进,从event handling, data binding, style, template, graphic, resource等等一路练过来,然后,然后呢?然后没了。然后可以看看MSDN上深入一点的文档,写个小程序什么的,再然后呢?再然后就真的没了

软件开发资料汇总 273

开箱即用!PyTorch-CUDA镜像助力GPU算力高效利用

本文介绍如何通过PyTorch-CUDA基础镜像实现GPU算力的高效利用,解决深度学习环境中CUDA、cuDNN与PyTorch版本兼容难题。借助容器化技术,实现开箱即用的开发体验,支持多卡训练、混合精度计算与完整生态集成,显著提升AI模型开发效率。

weixin_42284380的博客 483

本地跑不动大模型?云端GPU一键部署,小白10分钟成功体验

本文介绍了如何通过星图GPU平台自动化部署“unet person image cartoon compound人像卡通化 构建by科哥”镜像,实现高效的人像卡通化AI应用开发。用户无需本地高性能硬件,只需一键启动云端GPU实例,即可快速完成模型推理与风格迁移,适用于论文实验、数据增强等典型场景,大幅降低AI开发门槛。

SapphireOwl29的博客 362

JMeter分布式压测实战:突破单机性能瓶颈的架构与落地

压力测试工具的核心能力在于真实模拟高并发场景,而JMeter作为主流开源负载工具,其单机模式受限于JVM内存占用、GUI线程争抢和结果聚合开销,难以支撑5000+并发的工程化压测需求。分布式压测并非简单多机并行,而是通过主从角色解耦(控制机调度、压力机执行、被测系统隔离)与RMI通信优化,实现压力生成、资源消耗与结果采集的物理分离。该架构显著提升TP99统计精度、降低网络传输干扰,并支撑阶梯加压、故障注入、容器化调度等进阶实践。本文聚焦JMeter分布式压测的底层原理、五步搭建规范及生产级避坑要点,覆盖从环

weixin_30596735的博客 398
上一篇: 文件排版(文本文件读写)
下一篇: 线程同步问题
南懿烨曦
博客等级 码龄6年 108粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值