基于uniapp+vue3多端「h5+小程序+App」仿微信/抖音直播商城|uni-app+vue3小视频

uniapp-vue3-welive一款uniapp+vue3+pinia跨端仿抖音直播商城实例。

全新基于uniapp+vue3+vite4+pinia等技术研发的一款跨平台仿制微信/抖音直播带货商城uniapp+vue3短视频实例项目,支持编译到h5+小程序+App端。

在这里插入图片描述

技术框架

  • 编辑器:HbuilderX 3.98
  • 框架技术:uniapp+vue3+vite4+nvue+pinia
  • UI组件库:uv-ui + vk-uview
  • 弹框组件:uaPopup(uniapp封装多端弹框组件)
  • 自定义组件:uaNavbar+uaTabbar组件
  • 本地缓存:pinia-plugin-unistorage
  • 编译支持:H5+小程序+APP端

在这里插入图片描述
在这里插入图片描述
welive-uniapp支持全端编译至H5+小程序端+App端。
在这里插入图片描述
uni-welive短视频+直播页面采用Nvue开发范式。

在这里插入图片描述

项目结构

在这里插入图片描述
项目整体采用uniapp vue3 setup语法编码开发。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

uniapp+vue3自定义导航栏navbar+菜单栏tabbar

在这里插入图片描述
在这里插入图片描述
这两个组件的vue2版本已经发布到了插件市场,如果大家有需要,可以去下载一次性拿走使用。

https://ext.dcloud.net.cn/plugin?id=5592
https://ext.dcloud.net.cn/plugin?id=5593

uniapp+vue3短视频模块

uniapp-welive项目小视频模块采用全屏沉浸式滑动效果。分为顶部固定tabs+视频区+底部视频信息浮层三大模块。

在这里插入图片描述

<ua-layout><view class="ua__swipervideo flex1"><swiperclass="ua__swipervideo-wrap flex1":current="currentVideo"vertical:circular="true":duration="200"@change="handleChange"@transition="handleTransition"><swiper-item v-for="(item, index) in videoList" :key="index"><videoclass="ua__swipervideo-player flex1":id="'uplayer' + index":src="item.src":danmu-list="item.danmu":enable-danmu="true":controls="false":loop="true":autoplay="index == currentVideo":show-center-play-btn="false"object-fit="contain"@click="handleClickVideo"@play="isPlaying=true"@timeupdate="handleTimeUpdate":style="{'width': `${winWidth}px`, 'height': `${winHeight}px`}"></video><!-- 浮层模块 --><view class="ulive__video-float__info flexbox flex-col"><view class="flexbox flex-row flex-alignb"><!-- 左侧 --><view class="vdinfo__left flex1 flexbox flex-col"><view class="ltrow danmu flexbox" @click="handleOpenDanmu"><text class="danmu-txt"></text><uv-icon class="ico" name="edit-pen" color="#fff" size="14" /></view><view class="ltrow"><text class="ait">@{{item.author}}</text></view><view class="ltrow"><text class="desc">{{item.desc}}</text></view></view><!-- 右侧操作栏 --><view class="vdinfo__right flexbox flex-col"><view class="rtbtn avatar flexbox flex-col"><view class="ubox"><image class="uimg" :src="item.avatar" mode="aspectFill" /></view><view class="btn flexbox" :class="{'active': item.isFollow}" @click="handleFollow(index)"><uv-icon :name="item.isFollow ? 'checkmark' : 'plus'" :color="item.isFollow ? '#ff007f' : '#fff'" size="11" /></view></view><view class="rtbtn flexbox flex-col" @click="handleLiked(index)"><uv-icon name="heart-fill" :color="item.isLike ? '#ff007f' : '#fff'" size="40" /><text class="num">{{item.likeNum+(item.isLike ? 1 : 0)}}</text></view><view class="rtbtn flexbox flex-col" @click="handleOpenComment(index)"><uv-icon name="chat-fill" color="#fff" size="40" /><text class="num">{{item.replyNum}}</text></view><view class="rtbtn flexbox flex-col"><uv-icon name="star-fill" color="#fff" size="40" /><text class="num">{{item.starNum}}</text></view><view class="rtbtn flexbox flex-col" @click="handleOpenShare(index)"><uv-icon name="share-fill" color="#fff" size="40" /><text class="num">{{item.shareNum}}</text></view></view></view></view></swiper-item></swiper><!-- 固定tabs(脱离滑动区) --><view class="ulive__video-header__tabs" :style="{'margin-top': `${menuBarT}px`}"><uv-tabs :current="tabsCurrent" :list="tabsList" /></view><!-- 播放暂停按钮 --><view v-if="!isPlaying" class="ua__swipervideo-playbtn" :style="{'left': `${winWidth/2}px`, 'top': `${winHeight/2}px`}" @click="handleClickVideo"><text class="ua__swipervideo-playico welive-icon welive-icon-play nvueicon"></text></view><!-- 播放mini进度条 --><view class="ua__swipervideo-progress" :style="{'width': `${winWidth}px`}"><view class="ua__swipervideo-progressbar" :style="{'width': `${progressBar}px`}"></view></view></view><template #footer><ua-tabbar bgcolor="transparent" color="rgba(255,255,255,.7)" :border="false" :dock="false" transparent z-index="1000" /></template>
</ua-layout>

底部tabbar上面有一条迷你型小视频播放进度条。
在这里插入图片描述

<script setup>import { ref, computed, getCurrentInstance } from 'vue'import { onShow, onHide } from '@dcloudio/uni-app'import { getRandomColor } from '@/utils'// ...const { globalData } = getApp()const menuBarT = ref(globalData.menu?.top || globalData.statusBarH)const winWidth = ref(globalData.screenWidth)const winHeight = ref(globalData.screenHeight)const tabsList = ref([{ name: '推荐', count: 5 },{ name: '关注' },{ name: '同城' }])const tabsCurrent = ref(0)// 视频参数const currentVideo = ref(0)const isPlaying = ref(false)const clickNum = ref(0)const clickTimer = ref(null)const progressBar = ref(0)// 视频源const videoList = ref(videoJson)const danmuEditor = ref('')const isVisibleDanmu = ref(false)const commentRef = ref(null)const shareRef = ref(null)// .../*** ====================== 视频播放模块 ======================*/// 创建并返回 video 上下文 videoContext 对象const getVideoContext = () => {// return uni.createVideoContext(`uplayer${currentVideo.value}`, this)return uni.createVideoContext(`uplayer${currentVideo.value}`, getCurrentInstance())}// 垂直滑动视频,滑动改变时会触发 change 事件const handleChange = (e) => {const index = e.detail.currentprogressBar.value = 0handleReset()currentVideo.value = index// 播放handlePlay()}// 播放const handlePlay = () => {console.log('video play')let video = getVideoContext()if(!video) returnvideo.play()isPlaying.value = true}// 暂停const handlePause = () => {console.log('video pause')let video = getVideoContext()if(!video) returnvideo.pause()isPlaying.value = false}// 重置播放const handleReset = () => {console.log('video reset')let video = getVideoContext()if(!video) returnvideo.pause()video.seek(0)video.stop()isPlaying.value = false}// 监听播放进度条const handleTimeUpdate = (e) => {let { currentTime, duration } = e.detailprogressBar.value = parseInt((currentTime / duration).toFixed(2) * parseInt(winWidth.value))}// 点击视频(监听单双击)const handleClickVideo = () => {console.log('video click')clearTimeout(clickTimer.value)clickNum.value++clickTimer.value = setTimeout(() => {if(clickNum.value >= 2) {console.log('double click')}else {if(isPlaying.value) {handlePause()}else {handlePlay()}}clickNum.value = 0}, 200)}/*** ====================== 其它功能模块 ======================*/// 打开弹幕弹框const handleOpenDanmu = () => {isVisibleDanmu.value = true}// 关闭弹幕弹框const handleCloseDanmu = () => {uni.hideKeyboard()isVisibleDanmu.value = falsedanmuEditor.value = ''}// 发送弹幕const handleSendDanmu = () => {let video = getVideoContext()if(!video) returnvideo.sendDanmu({text: danmuEditor.value,color: getRandomColor()})handleCloseDanmu()}// 打开评论框const handleOpenComment = (index) => {commentRef.value.open()}// ...</script>
注意:在uniapp+vue3中没有this上下文,只能通过如下方式获取视频上下文实例。
uni.createVideoContext(`uplayer${currentVideo.value}`, getCurrentInstance())

uniapp+vue3仿抖音/微信直播

直播模块分为顶部信息条+直播流媒体区+滚动消息(加入直播间+送礼物+讲解商品)+底部toolbar栏

在这里插入图片描述
在这里插入图片描述

<ua-layout><view class="ua__swipervideo flex1"><swiperclass="ua__swipervideo-wrap flex1":current="currentLive"vertical@change="handleChange"><swiper-item v-for="(item, index) in liveList" :key="index"><videoclass="ua__swipervideo-player flex1":id="'uplayer' + index":src="item.src":controls="false":loop="true":autoplay="index == currentLive":show-center-play-btn="false"object-fit="contain":style="{'width': `${winWidth}px`, 'height': `${winHeight}px`}"></video><!-- 浮层模块 --><swiper class="ulive__swiperscreen flex1" :current="1"><!-- 清屏 --><swiper-item>第一屏</swiper-item><swiper-item><!-- 顶部区域 --><view class="ulive__headlayer" :style="{'top': menuBarT+'px'}"><!-- logo+关注 --><view class="ulive__hd-liveinfo flexbox flex-row flex-alignc"><view class="ulive__hd-avatar ulive__mask flex-alignc"><image class="logo" :src="item.logo" mode="widthFix" /><view class="flex1 flexbox flex-col ml-10"><text class="name">{{item.name}}</text><text class="zan">{{item.likeNum}}本场点赞</text></view><view class="btn flexbox flex-row flex-alignc" :class="{'active': item.isFollow}" @click="handleFollow(index)"><text class="btntext" :class="{'active': item.isFollow}">{{item.isFollow ? '已关注' : '关注'}}</text></view></view><view class="ulive__hd-onlineuser flex1"><uv-icon name="close" color="#fff" @click="handleLiveQuit" /></view></view><view class="ulive__hd-livewrap flexbox flex-row"><view class="ulive__hd-livewrap__left flex1 flexbox flex-col"><view class="ulive__hd-livewrap__tags flexbox flex-row"><view class="ulive__roundwrap ulive__mask"><uv-icon name="shopping-cart" color="#ffdd1a" /><text class="ulive__roundtext">服饰鞋包榜第1</text></view><view class="ulive__roundwrap ulive__mask ml-10"><uv-icon name="level" color="#ffdd1a" /><text class="ulive__roundtext">小时榜</text></view></view><!-- 红包+福袋倒计时 --><view class="ulive__hd-livewrap__redpacket flexbox flex-row"><view class="ulive__redpacket-item ulive__mask" @click="handleOpenRedpacket(1)"><image class="ulive__redpacket-image" src="/static/icon-fudai.png" mode="widthFix" /><text class="ulive__redpacket-time">04:49</text></view><view class="ulive__redpacket-item ulive__mask" @click="handleOpenRedpacket(2)"><image class="ulive__redpacket-image" src="/static/icon-hb.png" mode="widthFix" /><text class="ulive__redpacket-time">04:49</text></view><view class="ulive__redpacket-item ulive__mask center"><image class="ulive__redpacket-image" src="/static/icon-rotate.png" mode="widthFix" /><text class="ulive__redpacket-time">04:49</text></view></view></view><view class="ulive__hd-livewrap__right flexbox flex-col"><view class="ulive__roundwrap ulive__mask mr-20"><uv-icon name="kefu-ermai" color="#fff" /><text class="ulive__roundtext ml-5">后台</text></view></view></view></view><!-- 底部区域 --><view class="ulive__footlayer"><!-- 商品提示层 --><view class="ulive__ft-livewrap-placeholder animated fadeIn"><view class="ulive__ft-livewrap-hotbuy flexbox flex-row"><image class="gimg" :src="item.poster" mode="aspectFill" /><view class="ginfo flex1"><view class="flexbox flex-row"><text class="user c-ffdd1a">Andy</text><text class="c-fff">{{item.saleNum}}人在购买</text></view><text class="gdesc clamp1">{{item.desc}}</text></view><view class="btn"><text class="btntext">去购买</text></view></view></view><!-- 加入直播间/送礼物提示 --><view class="ulive__ft-livewrap-animateview flexbox flex-col"><view class="ulive__ft-livewrap-animatejoin ulive__ft-livewrap-placeholder"><view v-if="joinRoomData" class="ulive__ft-livewrap-joinroom"><text class="ulive__ft-livewrap-joinroom__text">欢迎{{joinRoomData}}加入了直播间</text></view></view><!-- 送礼物 --><view class="ulive__ft-livewrap-animategift ulive__ft-livewrap-placeholder"><view v-if="!isEmpty(sendGiftData)" class="ulive__ft-livewrap-activegift flexbox flex-row flex-alignc"><image class="avatar" :src="sendGiftData.avatar" /><view class="info flex1"><text class="name">{{sendGiftData.user}}</text><text class="desc">送出</text></view><image class="gift" :src="sendGiftData.pic" /></view></view></view><!-- 聊天浮层+商品讲解 --><view class="ulive__ft-livewrap-mixinview flexbox flex-row"><!-- 聊天消息 --><view class="ulive__ft-livewrap-chats flex1"><scroll-view class="ulive__ft-livewrap-chats__scrollview flex1" scroll-y show-scrollbar="false" :scroll-into-view="scrollToView" :lower-threshold="5" @scroll="handleMsgScroll" @scrolltolower="handleMsgScrollLower"><block v-for="(msgitem, msgidx) in item.message" :key="msgidx"><view v-if="msgitem.type == 'notice'" class="notice" :id="`msg-${msgitem.id}`"><view class="item"><text class="noticetext">{{msgitem.content}}</text></view></view><view v-else-if="msgitem.type == 'gift'" class="gift" :id="`msg-${msgitem.id}`"><view class="item"><text class="giftuser">{{msgitem.user}}</text><text class="gifttext">送出了{{msgitem.content}}</text><image class="giftimg" :src="msgitem.img" mode="widthFix" /><text class="giftnum">x{{msgitem.num}}</text></view></view><view v-else class="msg" :id="`msg-${msgitem.id}`"><view class="item"><text v-if="msgitem.tag" class="tag">{{msgitem.tag}}</text><text class="user">{{msgitem.user}}</text><text class="text" :style="[fixTextStyle]">{{msgitem.isbuy ? '正在购买' : msgitem.content}}</text><text v-if="msgitem.isbuy" class="tag tag-buy">去购买</text></view></view></block></scroll-view><view v-if="!isEmpty(msgUnread)" class="ulive__ft-livewrap-chats__unread" @click="handleMsgIsRead"><text class="c-eb4868 fs-24">{{msgUnread.length}}条新消息</text></view></view><!-- 商品讲解 --><view v-if="isVisibleGoodsTalk" class="ulive__ft-livewrap-activegoods animated fadeInRight" id="goodsTalkID"><view class="ulive__ft-livewrap-activegoods__hotsale flexbox flex-row"><image class="fimg" src="/static/icon-hot.png" mode="widthFix" /><text class="c-fff fs-32">热卖 x{{item.saleNum}}</text></view><swiper class="ulive__ft-livewrap-activegoods__swiper"><swiper-item><view class="ulive__ft-livewrap-activegoods__card"><view class="gwrap" @click="toGoodsDetail"><image class="gimg" :src="item.poster" mode="aspectFill" /><view class="waves"><text class="c-fff fs-24">讲解中</text></view><view class="close" @click.stop="isVisibleGoodsTalk=false"><uv-icon name="close-circle-fill" color="rgba(0, 0, 0, .3)" size="14" /></view></view><view class="ginfo flexbox flex-col"><text class="clamp1 fs-24">{{item.desc}}</text><text class="clamp1 fs-24 c-eb4868">7天无理由退货</text></view><view class="btn flexbox flex-row"><text class="flex1 c-fff fs-28">79.00</text><text class="qiang"></text></view></view></swiper-item></swiper></view></view><!-- 工具栏 --><view class="ulive__ft-livewrap-toolbar flexbox flex-row"><view class="editorwrap flex1 flexbox flex-row flex-alignc"><view class="flex1" @click="handleOpenChatbox"><text class="editorwrap-text">说点什么...</text></view></view><view class="btnwrap flexbox flex-row"><view class="btn flexbox" @click="handleOpenMenus"><uv-icon name="grid" color="#3c9cff" size="22" /></view><view class="btn flexbox" @click="handleOpenGoods(item)"><uv-icon name="shopping-cart-fill" color="#ffaa00" size="24" /></view><view class="btn flexbox" @click="handleOpenGifts"><uv-icon name="gift" color="#ff0ad3" size="22" /></view><view class="btn flexbox"><uv-icon name="more-dot-fill" color="#efe9ff" size="18" /></view></view></view></view></swiper-item></swiper></swiper-item></swiper></view>
</ua-layout>

由于短视频及直播页面采用Nvue编码,vk-uview组件库不支持nvue,有些组件则是使用uv-ui组件库(支持nvue)。

OK,以上就是uniapp+vue3开发跨端直播商城项目的一些分享。

最后附上两个实例项目

  • Electron27+React18仿MacOS桌面端框架系统
    https://blog.csdn.net/yanxinyun1990/article/details/134567716

  • Tauri+vue3后台管理系统
    https://blog.csdn.net/yanxinyun1990/article/details/131734743

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/228671.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++写入数据到文件中

假设你想编写一个C程序&#xff1a;当你在调试控制台输入一些数据时&#xff0c;系统会自动存入到指定的文件中&#xff0c;该如何操作呢&#xff1f; 具体操作代码如下&#xff1a; #include<iostream> #include<string> #include<fstream> using namespa…

性能优化(CPU优化技术)-ARM Neon详细介绍

本文主要介绍ARM Neon技术&#xff0c;包括SIMD技术、SIMT、ARM Neon的指令、寄存器、意图为读者提供对ARM Neon的一个整体理解。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09…

深入探索MongoDB集群模式:从高可用复制集

MongoDB复制集概述 MongoDB复制集主要用于实现服务的高可用性&#xff0c;与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。 复制集的主要功能 数据复制&#xff1a;数据写入主节点&#xff08;Primary&#xff09;时&#xff0c;自动复制到一个或多个副本节…

Portraiture4.1汉化版PS磨皮插件(支持原生m1芯片m2)

Portraiture汉化版PS磨皮插件。本期推荐一款全新ai算法ps2024中文汉化版ps磨皮插件Portraiture 4.1.2美颜滤镜安装包最新版ps调整肤色插件! 全新Portraiture 4.1.2版本PS人像修图美颜磨皮插件&#xff0c;升级AI算法&#xff0c;并支持多人及全身磨皮美化模式&#xff0c;推荐…

边缘计算网关在温室大棚智能控制系统应用,开启农业新篇章

项目需求 ●目前大棚主要通过人为手动控温度、控水、控光照、控风&#xff0c;希望通过物联网技术在保障产量的前提下&#xff0c;提高作业效率&#xff0c;降低大棚总和管理成本。 ●释放部分劳动力&#xff0c;让农户有精力管理更多大棚&#xff0c;进而增加农户收入。 ●…

Group k-fold解释和代码实现

Group k-fold解释和代码实现 文章目录 一、Group k-fold解释和代码实现是什么&#xff1f;二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释 四、总结 一、Group k-fold解释和代码实现是什么&#xff1f; 0&#xff0c;1…

分布式数据库事务故障恢复的原理与实践

关系数据库中的事务故障恢复并不是一个新问题&#xff0c;自70年代关系数据库诞生之后就一直伴随着数据库技术的发展&#xff0c;并且在分布式数据库的场景下又遇到了一些新的问题。本文将会就事务故障恢复这个问题&#xff0c;分别讲述单机数据库、分布式数据库中遇到的问题和…

java球队信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web球队信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…

VS配置PCO相机SDK环境

VS配置PCO相机SDK环境 概述:最近要用到一款PCO相机,需要协调其他部件实现一些独特的功能。因此需要用到PCO相机的SDK,并正确配置环境。良好的环境是成功的一半。其SDK可以在官网下载,选择对应版本的安装即可。这里用的是pco.cpp.1.2.0 Windows,VS 2022 专业版。 链接: P…

OpenOCD简介和下载安装(Ubuntu)

文章目录 OpenOCD简介OpenOCD软件模块OpenOCD源码下载OpenOCD安装 OpenOCD简介 OpenOCD&#xff08;Open On-Chip Debugger&#xff09;开放式片上调试器 OpenOCD官网 https://openocd.org/&#xff0c;进入官网点击 About 可以看到OpenOCD最初的设计是由国外一个叫Dominic Ra…

Glary Utilities Pro - 电脑系统优化全面指南:详尽使用教程

软件简介&#xff1a; Glary Utilities Pro 是一款全面的电脑优化工具&#xff0c;它旨在帮助用户提升计算机的性能和稳定性。这款软件提供了多种功能&#xff0c;包括系统清理、优化、修复以及保护。通过一键扫描&#xff0c;它可以识别并清除无用文件、临时数据、注册表错误等…

计算机网络:知识回顾

0 本节主要内容 问题描述 解决思路 1 问题描述 通过一个应用场景来回顾计算机网络涉及到的协议&#xff08;所有层&#xff09;。如下图所示场景&#xff1a; 学生Bob将笔记本电脑用一根以太网电缆连接到学校的以太网交换机&#xff1b;交换机又与学校的路由器相连&#xf…

Embedding模型在大语言模型中的重要性

引言 随着大型语言模型的发展&#xff0c;以ChatGPT为首&#xff0c;涌现了诸如ChatPDF、BingGPT、NotionAI等多种多样的应用。公众大量地将目光聚焦于生成模型的进展之快&#xff0c;却少有关注支撑许多大型语言模型应用落地的必不可少的Embedding模型。本文将主要介绍为什么…

C练习——银行存款

题目&#xff1a;设银行定期存款的年利率 rate为2.25%,已知存款期为n年&#xff0c;存款本金为capital 元,试编程计算并输出n年后本利之和deposit。 解析&#xff1a;利息本金*利率&#xff0c;下一年的本金又是是今年的本利之和 逻辑&#xff1a;注意浮点数&#xff0c;导入…

【计算机毕业设计】ssm+mysql+jsp实现的在线bbs论坛系统源码

项目介绍 jspssm&#xff08;springspringMVCmybatis&#xff09;MySQL实现的在线bbs论坛系统源码&#xff0c;本系统主要实现了前台用户注册登陆、浏览帖子、发布帖子、个人信息管理、消息通知管理&#xff0c;积分管理&#xff0c;后台管理功能有&#xff1a;友情链接管理、…

蓝牙物联网灯控设计方案

蓝牙技术是当前应用最广泛的无线通信技术之一&#xff0c;工作在全球通用的 2.4GHZ 的ISM 频段。蓝牙的工作距离约为 100 米&#xff0c;具有一定的穿透性&#xff0c;没有方向限制。具有低成本、抗干扰能力强、传输质量高、低功耗等特点。蓝牙技术组网比较简单&#xff0c;无需…

Unity坦克大战开发全流程——结束场景——失败界面

结束场景——失败界面 在玩家类中重写死亡函数 在beginPanel中锁定鼠标

关键字:throw关键字

在 Java 中&#xff0c;throw关键字用于抛出异常。当程序执行过程中发生意外情况&#xff0c;如错误的输入、资源不足、错误的逻辑等&#xff0c;导致程序无法正常执行下去时&#xff0c;可以使用throw关键字抛出异常。 以下是使用throw关键字的一些示例&#xff1a; 抛出异常…

【Linux--多线程同步与互斥】

目录 一、线程互斥1.1相关概念介绍1.2互斥量mutex1.3互斥量接口1.3.1初始化互斥量1.3.2销毁互斥量1.3.3互斥量加锁1.3.4互斥量解锁1.3.5使用互斥量解决上面分苹果问题 1.4互斥原理 二、可重入与线程安全2.1相关概念2.2常见线程不安全的情况2.3常见不可重入的情况2.4 可重入与线…