当前位置: 首页 > news >正文

Linux线程总结

Linux 线程总结

  • 简述
  • 常用的线程相关API函数原型(3、4、5)
  • 线程创建、等待、退出API使用
    • 创建线程、等待线程
    • 线程退出、传参
    • 线程间共享数据(全局变量)
  • 互斥锁相关API使用
    • 简述互斥锁的作用
    • 互斥锁与全局变量配合使用
    • 死锁
  • 条件变量相关API的使用
    • 简述条件变量的使用
    • 条件变量的使用
    • 测试----导出运行结果
      • 线程改动的部分:
      • 测试
      • 指令
  • 互斥锁和条件变量的动静态初始化
  • 线程生产者与消费者模式----条件变量模型

简述

进程与线程的区别:

相同点:多任务处理

不同点:
(1)进程有独立的内存空间(代码段、数据段、堆、栈),线程没有,进程是线程的容器
(2)相对于进程而言,线程间切换效率高,消耗内存小,多线程在同一进程下共享数据(变量),有更为简便的通信机制

常用的线程相关API函数原型(3、4、5)

#include <pthread.h>// 创建线程、等待、退出
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
int pthread_join(pthread_t thread, void **rval_ptr);
int pthread_exit(void *rval_ptr);// 互斥锁相关API: 创建锁、上锁、解锁、毁锁
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_lock(pthread_mutex_t *restrict mutex);
int pthread_mutex_unlock(pthread_mutex_t *restrict mutex);
int pthread_mutex_destroy(pthread_mutex_t *restrict mutex);//条件变量相关API: 创建、触发、广播、等待、销毁  
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
int pthread_cond_signal(pthread_cond_t *restrict cond);
int pthread_cond_broadcast(pthread_cond_t *restrict cond);
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
int pthread_cond_destroy(pthread_cond_t *restrict cond);统一:成功返回0,失败返回-1

线程创建、等待、退出API使用

创建线程、等待线程

#include <stdio.h>
#include <pthread.h>void *pthread1(void* arg)
{//打印线程idprintf("pthread1 creat,id:%ld\n", (unsigned long)pthread_self());//线程传参,打印data值,需强转printf("data=%d\n", *(int *)arg);}// int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
// int pthread_join(pthread_t thread, void **rval_ptr);
// int pthread_exit(void *rval_ptr);int main()
{int data = 10;pthread_t t1;printf("before create\n");pthread_create(&t1, NULL, &pthread1, (void *)&data);printf("after create\n");pthread_join(t1, NULL);		
//		while(1);return 0;
}

线程退出、传参

#include <stdio.h>
#include <pthread.h>void *pthread1(void* arg)
{
//      static int ret = 55;static char *ret = "sunshine";printf("pthread1 creat,id:%ld\n", (unsigned long)pthread_self());printf("data=%d\n", *(int *)arg);pthread_exit((void *)ret);
}// int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
// int pthread_join(pthread_t thread, void **rval_ptr);
// int pthread_exit(void *rval_ptr);int main()
{int data = 10;
//      int *p = NULL;char *pret = NULL;pthread_t t1;printf("before create\n");pthread_create(&t1, NULL, &pthread1, (void *)&data);printf("after create\n");pthread_join(t1, (void **)&pret);
//      printf("ret=%d\n", *pret);printf("ret:%s\n", pret);return 0;
}

线程间共享数据(全局变量)

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>int data = 0;void *pthread1()
{char *ret = NULL;while(1){printf("pthread1 data:%d\n", data++);sleep(2);if(data == 5){ret = "pthread1 quit";pthread_exit((void *)ret);break; }}
}void *pthread2()
{while(1){printf("pthread2 data:%d\n", data++);sleep(2);}
}// int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
// int pthread_join(pthread_t thread, void **rval_ptr);
// int pthread_exit(void *rval_ptr);int main()
{pthread_t t1;pthread_t t2;pthread_create(&t1, NULL, &pthread1, NULL);pthread_create(&t2, NULL, &pthread2, NULL);while(1){printf("main data:%d\n",data++);sleep(2);}char *pret = NULL;pthread_join(t1, (void **)&pret);printf("ret:%s\n", pret);pthread_join(t1, NULL);return 0;
}

变量值递增,没有重复,但是能不能让变量等于某个值线程就退出

互斥锁相关API使用

简述互斥锁的作用

不让线程中途退出情况下,在如果用互斥锁锁住一个线程的相关内容(循环、条件筛选、调试信息等),它能确保将这个线程的所有的内容执行完再到其他线程

互斥锁与全局变量配合使用

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>int data = 0;pthread_mutex_t mutex;void *pthread1()
{pthread_mutex_lock(&mutex);while(1){printf("pthread1 data:%d\n", data++);sleep(1);if(data == 3){pthread_mutex_unlock(&mutex);printf("===========pthread1 quit,data:%d========\n",data);exit(0);	//进程退出,线程也会退出}}
}void *pthread2()
{while(1){printf("pthread2 data:%d\n", data);pthread_mutex_lock(&mutex);data++;pthread_mutex_unlock(&mutex); sleep(1);}
}int main()
{pthread_t t1;pthread_t t2;pthread_mutex_init(&mutex, NULL);pthread_create(&t1, NULL, &pthread1, NULL);pthread_create(&t2, NULL, &pthread2, NULL);while(1){printf("main data:%d\n",data);sleep(1);}pthread_join(t1, NULL);pthread_join(t1, NULL);pthread_mutex_destroy(&mutex);return 0;
}

指定线程pthread1中的data等于3时,用exit退出会导致整个进程退出,也就是说多线程中一个线程出现异常情况,会牵连其它线程,甚至让整个进程退出,而多个进程,其中一个进程崩了,也不会导致进程都崩

死锁

两个锁或两个锁以上才能造成死锁

#include <stdio.h>
#include <pthread.h>pthread_mutex_t mutex1;
pthread_mutex_t mutex2;void *pthread1(void* arg)
{pthread_mutex_lock(&mutex1);sleep(1);pthread_mutex_lock(&mutex2);printf("pthread1 creat,id:%ld\n", (unsigned long)pthread_self());printf("data=%d\n", *(int *)arg + 1);pthread_mutex_unlock(&mutex1);
}void *pthread2(void* arg)
{pthread_mutex_lock(&mutex2);sleep(1);pthread_mutex_lock(&mutex1);printf("pthread2 creat,id:%ld\n", (unsigned long)pthread_self());printf("data=%d\n", *(int *)arg + 2);pthread_mutex_unlock(&mutex2);
}void *pthread3(void* arg)
{printf("pthread3 creat,id:%ld\n", (unsigned long)pthread_self());printf("data=%d\n", *(int *)arg + 3);
}int main()
{int data = 0;pthread_t t1;pthread_t t2;pthread_t t3;pthread_mutex_init(&mutex1, NULL);pthread_mutex_init(&mutex2, NULL);pthread_create(&t1, NULL, &pthread1, (void *)&data);pthread_create(&t2, NULL, &pthread2, (void *)&data);pthread_create(&t3, NULL, &pthread3, (void *)&data);printf("main\n");pthread_join(t1, NULL);pthread_join(t2, NULL);pthread_join(t3, NULL);pthread_mutex_destroy(&mutex1);pthread_mutex_destroy(&mutex2);return 0;
}

条件变量相关API的使用

简述条件变量的使用

条件变量的使用基于互斥锁,条件变量与互斥锁搭配使用时,比单纯的用互斥锁更智能些,它可以用于一个线程运行到一定程度,然后让另一个线程执行特定任务

条件变量的使用

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>int data = 0;pthread_mutex_t mutex;
pthread_cond_t cond;void *pthread1()
{while(1){pthread_cond_wait(&cond, &mutex);printf("pthread1 data:%d\n", data);sleep(1);if(data == 3){printf("===========pthread1,data:%d========\n",data);data = 0;}}
}void *pthread2()
{while(1){printf("pthread2 data:%d\n", data);pthread_mutex_lock(&mutex);data++;if(data == 3){pthread_cond_signal(&cond);}pthread_mutex_unlock(&mutex); sleep(1);}
}int main()
{pthread_t t1;pthread_t t2;pthread_mutex_init(&mutex, NULL);pthread_cond_init(&cond, NULL);pthread_create(&t1, NULL, &pthread1, NULL);pthread_create(&t2, NULL, &pthread2, NULL);while(1){printf("main data:%d\n",data);sleep(1);}pthread_join(t1, NULL);pthread_join(t1, NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

测试----导出运行结果

线程改动的部分:

void *pthread1()
{int cnt = 1;while(1){pthread_cond_wait(&cond, &mutex);printf("pthread1 data:%d\n", data);sleep(1);if(data == 3){printf("===========pthread1,data:%d========\n",data);data = 0;if(cnt == 5){exit(1);}cnt++;}}
}

测试

vi test.c

#include <stdlib.h>int main(int argc, char **argv)
{int i;int time = atoi(argv[1]);for(i=1;i<=time;i++){system("./a.out");}return 0;
}

gcc test.c -o test

指令

指令:./test 5 >> test.ret.txt &

互斥锁和条件变量的动静态初始化

静态初始化:宏
可以省去创建函数,但是这种初始化使用有限

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

动态初始化:

pthread_mutex_t mute;
pthread_cond_t cond;pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);

线程生产者与消费者模式----条件变量模型

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;struct Node
{int data;struct Node *next;
};struct Node *head = NULL;void *producer(void *arg)
{struct Node *new = NULL;while(1){new = malloc(sizeof(struct Node));new->data = rand() % 100; //产生100以内的随机数pthread_mutex_lock(&mutex);new->next = head; //头插head = new;printf("producer -- %d\n", head->data);pthread_mutex_unlock(&mutex);pthread_cond_signal(&cond);sleep(rand()%5);}
}void *customer(void *arg)
{struct Node *tmp = NULL;while(1){pthread_mutex_lock(&mutex);while(head == NULL){//程序一开始消费者线程就阻塞在这里,直至信号触发pthread_cond_wait(&cond, &mutex);}tmp = head;head = tmp->next;printf("customer -- %d\n", tmp->data);pthread_mutex_unlock(&mutex);free(tmp); //释放资源sleep(rand()%5); //5s内随机睡眠}
}int main()
{srand(time(NULL)); //配合rand函数使用pthread_t pro;pthread_t cus;pthread_create(&pro, NULL, producer, NULL);pthread_create(&cus, NULL, customer, NULL);pthread_join(cus, NULL);pthread_join(cus, NULL);//因为while(1), 互斥锁(量)和条件变量无法删除//省略了释放资源这一步return 0;
}

运行结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

【RTT】SPI Flash 与文件系统(2):FAL

参考文档&#xff08;国内&#xff09;&#xff1a;FAL 参考文档 一、概述 FAL (Flash Abstraction Layer) &#xff0c;即 Flash 抽象层&#xff0c;是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层&#xff0c;对上层统一了 Flash 及 分区操作的 API。 对于 FAL 的依赖…...

数据库索引高频面试题:java类的继承关系

前言 今天我们来说说Redis为什么高性能&#xff1f;如何做高可用&#xff1f; Redis为什么这么快&#xff1f; Redis是单线程的&#xff0c;避免了多线程的上下文切换和并发控制开销&#xff1b;Redis大部分操作时基于内存&#xff0c;读写数据不需要磁盘I/O&#xff0c;所以速…...

数据库事物隔离级别

数据库事务的隔离级别有4种&#xff0c;由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且&#xff0c;在事务的并发操作中可能会出现脏读&#xff0c;不可重复读&#xff0c;幻读。下面通过事例一一阐述它们的概念与联系。 Read unc…...

推荐学习!超全Android中高级面试复习大纲,大厂面经合集

前言 这些题目是网友去美团等一线互联网公司面试被问到的题目。笔者从自身面试经历、各大网络社交技术平台搜集整理而成&#xff0c;熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。 主要分为以下几部分&#xff1a; &#xff08;1&#xff09;Android面试题 …...

用户增长——Cohort Analysis 留存分析(三)

转载于:Cohort Analysis&#xff1a;用户在哪一步离开了我们的产品&#xff1f; 数据是会骗人的&#xff0c;尤其是平均数据&#xff08;真实世界会有用户每个月下单2.5次吗&#xff1f;很可能是两个分别下单1次和4次的客户而已&#xff09;&#xff0c;一个中等的平均的用户画…...

网站服务01-网站服务原理--(linux运维14)

网站服务原理1. 网站页面访问流程2.HTTP协议资源信息3. 评测网站好坏的指标1. 网站页面访问流程 客户端 浏览器输入要访问的地址 回车客户端完成域名的解析过程&#xff08;DNS&#xff09;客户端直接访问相应的网站服务器 建立tcp三次握手客户端 访问网站服务器 发送http请求…...

Python小游戏之王者荣耀

欢迎来到王者荣耀… 闲来无事&#xff0c;写点代码复习复习&#xff01; 游戏内容涉及&#xff1a; 1.随机数生成 2.相关模块用法 3.0 1 用法 4.条件判断 5.循环 6.列表 7.单词的记忆…mmp(你四级过了吗…) import random print(**40) print(\t欢迎来到王者荣耀) print(**40) …...

记一次apollo包中guava版本问题Preconditions.checkArgument(ZLjava/lang/String;ILjava/lang/Object;)

An attempt was made to call the method com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;ILjava/lang/Object;)V but it does not exist. Its class, com.google.common.base.Preconditions, is available from the following locations:jar:file:...

6 月份最火的 10 个 GitHub 项目

都是干货: https://mp.weixin.qq.com/s/CNXd2YT8j3q–_7F_r10JQ...

2021最新Android常用开源库总结,看完这一篇就够了!

3-5年的Android工程师最容易遇到的4个瓶颈是什么&#xff1f; 1.原理认知浅 工作内容多是简单UI界面开发和第三方SDK整合&#xff0c;对原理层和底层开发了解不深 2.技术视野窄 长期在小型软件公司&#xff0c;外包公司工作&#xff0c;技术视野被限制的太厉害 3.薪资提升…...

【泛微ecology9 实战教程】流程实战-显示属性联动

【泛微ecology9 实战教程】流程实战-显示属性联动...

App Annie:全球消费者平均花费在手机上时间突破4小时

根据移动数据和分析公司 App Annie 公布的最新报告&#xff0c;全球消费者现在平均每天花费在智能手机上的时间为 4.2 个小时&#xff0c;比两年前增加了 30%。而且在某些市场使用时间更高&#xff0c;甚至有超过 5 个小时。 报告中指出在 2021 年第 1 季度&#xff0c;在美国、…...

Aspose工具类,以及jar包

Aspose工具类&#xff0c;以及jar包Aspose1.工具类 AsposeUtil2.license.xmlAspose 1.工具类 AsposeUtil package com.tx.web.controller.business.utils;import java.io.*;import com.aspose.cells.Workbook; import com.aspose.slides.Presentation; import com.aspose.wor…...

.NET依赖注入[30]

12.3 何时使用DI容器 在本书的前几部分&#xff0c;我们只使用Pure DI作为我们的对象组合方法。这不仅仅是为了教育目的。完整的应用程序可以单独使用Pure DI来构建。   在第12.2节中&#xff0c;我们谈到了DI容器的不同配置方法&#xff0c;以及使用自动注册如何提高你的组合…...

DBC 2000 安装

这玩意就是传奇用的数据库 DBC2000是一款专用于架设热血传奇和传奇世界的数据库程序&#xff0c;非常的强大&#xff0c;通常用于传奇私服的架设。 DBC2000软件截图1 软件特色&#xff1a; 1、附带了相应的注册机&#xff0c;能够成功激活软件&#xff0c;完美适用于32位和6…...

LeetCode-155-最小栈

最小栈 题目描述&#xff1a;设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。 示例说明…...

三步搞定使用Augmentor对训练数据集进行扩增

文章目录前言实现过程前言 在训练模型时&#xff0c;有时在数据量较少情况下&#xff0c;避免过拟合&#xff0c;通常会采取人为进行数据增强来达到扩充数据集的目的&#xff0c;下面就介绍一种使用Augmentor来扩充数据集的方法。 实现过程 step 1 将源数据放在E盘step 2 运…...

【纯干货】Java 并发进阶常见面试题总结

Java 并发进阶常见面试题总结 1. synchronized 关键字 1.1. 说一说自己对于 synchronized 关键字的了解 synchronized关键字解决的是多个线程之间访问资源的同步性&#xff0c;synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 另外&…...

Linux之基础完结篇

大家好&#xff01;Linux基础篇就这些&#xff0c;今天是最后一课&#xff0c;也没什么好讲的&#xff0c;抒抒情吧。我呢&#xff0c;现在也就是一名大二的学生&#xff0c;对未来有时候挺自信的&#xff0c;但有时候也挺迷惘的。我一直在找自己喜欢的事情&#xff0c;然后坚持…...

线程池Executors(Java)

引入 池&#xff1a;容器的意思 使用一个线程通常要经过创建线程、创建任务、执行任务、关闭线程,在这个过程中&#xff0c;创建任务和执行任务的时间很少 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&#xff0c;浪费的时间多&…...

WPF 简单使用keybd_event模拟触发键盘

主要是添加Win32函数 其次是定义键盘按下&#xff0c;抬起的两个固定值。 [DllImport("User32.dll")]public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);/// <summary>/// 按下/// </summary>const int KEY…...

34. 图解 Go 语言:静态类型与动态类型

转载自&#xff1a;&#xff1a;github.com/iswbm/GolangCodingTime 在自己学习 Golang 的这段时间里&#xff0c;我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》&#xff0c;对于 Go 语言&#xff0c;我也算是个初学者&#xff0c;因此写的东西应该会比较适合刚接…...

Hive表类型(存储格式)

转载专用&#xff1a;读到了好文章&#xff0c;用于分享收藏&#xff0c;侵权删。转发自大佬&#xff1a;桥路丶 &#xff0c;https://blog.csdn.net/qq_33876553版权声明&#xff1a;本文为CSDN博主「桥路丶」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载…...

object.assgin

对象赋值 我在vue中进对象赋值进行遇到其对象的observer id改变了 例子&#xff1a; 创建时控制台 图1&#xff1a; 点击后 图2&#xff1a; 为什么会遇到这种问题 其实是因为我们在进行对象赋值的时候是进行了直接赋值&#xff0c;直接赋值会照成其对象的指针改变了指向&…...

git 替换commit的账户与邮箱信息 GitLab: Committer‘s email does not follow the pattern

最终解决方法来源&#xff1a; https://segmentfault.com/q/1010000006999861 https://www.cnblogs.com/zh7791/p/12986083.html ① git rebase -i HEAD~N N代表前N次的提交记录 ② 出现记录后键入i进入INSERT模式&#xff0c;在需要修改的条目上&#xff0c;将pick改为edit…...

Java学习五阶段-RabbitMQ-SpringBoot整合

文章目录 新建项目pom.xmlapplication.yml主程序 简单模式主程序生产者消费者测试类 工作模式主程序生产者消费者测试类 ack模式设置 ack 模式手动执行确认操作 抓取数量发布和订阅模式主程序生产者消费者测试类 路由模式主程序生产者消费者测试类 主题模式主程序生产者消费者测…...

----- ElasticSearch -----

1.什么是RestFul 2.什么是全文检索 3.什么是Elastic Search 开源 Apache Lucen 工具包 java api特别多 solr 全文检索服务器 底层封装了lucene ElasticSearch 开源搜索引擎 java 4.ES中基本概念 1&#xff09;接近实时(NRT Near Real Time 2&#xff09;索引(index) 3&am…...

光线跟踪算法技术 笔记

P53 这里好像QT 哈哈...

防火墙高可靠性

双机热备、BFD双向转发检测、IP-LINK链路检测、Link-Group逻辑组、ETH-Trunk链路捆绑、Bypass&#xff0c;跨数据中心集群&#xff0c;双主控、业务板备份、数据中心会话同步 双机热备 目的&#xff1a;为了防止单点故障 实现&#xff1a;两台硬件软件相同的FW之间通过一条独…...

SQL server安装时显示重启计算机失败问题解决办法

SQL server安装时显示重启计算机失败问题解决办法参考文章&#xff1a; &#xff08;1&#xff09;SQL server安装时显示重启计算机失败问题解决办法 &#xff08;2&#xff09;https://www.cnblogs.com/netflix/p/12074481.html 备忘一下。...

[附源码]计算机毕业设计车源后台管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…...

x265 帧间预测

帧间编码入口函数&#xff1a; 从 Analysis::compressCTU 是ctu编码的入口函数&#xff0c;根据 slice 类型判断是 I 还是 BP&#xff0c;如果是BP则执行帧间编码函数 Analysis::compressInterCU_rdx_x&#xff1a;&#xff1a;/*压缩分析CTU过程&#xff1a;1.为当前CTU加载QP…...

魅族怎么打开位置服务器,魅族MX的GPS如何在设置中打开

魅族MX直接下拉菜单打开第四个按钮就是GPS。魅族MX采用直板大屏幕触控设计&#xff0c;同时配备了主流的4英寸的屏幕&#xff0c;1600万色的分辨率为640*960像素&#xff0c;配以全球最自然亮丽的ASV的屏幕材质&#xff0c;全面提高了液晶屏幕的可视角度、液晶颗粒的反应时间、…...

黄章“杀手锏”来了:魅族16sPro28号正式发布,煤油疯狂打call

“等待&#xff0c;是最长情的告白。感谢等待&#xff0c;我们明早10点见”&#xff0c;这是魅族科技发的一段话。不少魅友都搬着小板凳等着官微的消息&#xff0c;如约而至&#xff0c;在万众期待下魅族官方终于揭晓了魅族16s Pro 的发布时间与地点。 魅族 16s Pro 将于8月28号…...

魅族 Android文件夹,魅族MX手机上的文件夹哪个是sd卡的根目录

魅族MX的根目录就是"文档”空白处&#xff0c;不要放到任何文件夹中。魅族MX采用直板大屏幕触控设计&#xff0c;同时配备了主流的4英寸的屏幕&#xff0c;1600万色的分辨率为640*960像素&#xff0c;配以全球最自然亮丽的ASV的屏幕材质&#xff0c;全面提高了液晶屏幕的可…...

android魅族手机 定位功能吗,魅族MX如何在手机上帮助别人定位手机知道对方的账号...

魅族MX可以在魅族手机自带的应用中心&#xff0c;搜索下载“查找手机”&#xff0c;安装后输入对方的flyme账号跟密码即可完成定位搜索。魅族MX采用直板大屏幕触控设计&#xff0c;同时配备了主流的4英寸的屏幕&#xff0c;1600万色的分辨率为640*960像素&#xff0c;配以全球最…...

android魅族手机 定位功能吗,定位加追踪 手机遗失是否可能找回?

今天我就来给大家介绍一下&#xff0c;如果手机遗失&#xff0c;用户能够执行的一些方法&#xff0c;这些方法可能会帮助你尽量减少所造成的损失。Android&#xff1a;谷歌服务与魅族与iOS相比&#xff0c;Android系统虽然原生也拥有查找手机的服务&#xff0c;所有的Nexus系列…...

【数据结构】顺序表的概念及实现

顺序表1、顺序表概念2、初始化顺序表3、销毁顺序表4、判断顺序表是否为空5、打印顺序表6、检查顺序表的容量&#xff08;同时充当扩容任务&#xff09;7、顺序表的尾插8、顺序表的头插9、顺序表的尾删10、顺序表的头删11、查找顺序表中某个数的位置12、在顺序表pos位置插入数字…...

鸿蒙系统手机魅族,华为鸿蒙系统手机进展顺利 魅族OPPO或将加入

早在今年九月的华为开发者大会上&#xff0c;华为消费者业务软件部总裁王成录就已经表示&#xff0c;华为鸿蒙系统手机HarmonyOS 开发者版本进展顺利&#xff0c;预计将会在12月中下旬与大家见面。而根据博主长安数码君 的最新爆料&#xff0c;华为HarmonyOS 2.0 开发者版本开放…...

linux 魅族,传魅族17全系90Hz刷新率

导读腾讯数码讯(水蓝)定档四月份发布的魅族 17 虽然没有任何入网信息曝光&#xff0c;但网络上各种传闻还是炒得火热。而针对有消息称魅族 17 Pro 将采用曲面屏设计和支持 120Hz 刷新率的传闻&#xff0c;则有熟悉内情的网友爆料称&#xff0c;魅族 17 两个版本全系皆为直面屏和…...

魅族鸿蒙系统测试,魅族Watch 将搭载鸿蒙操作系统 只需一个OTA 代替手机日常完全没有问题...

1 系统方面采用更成熟的安卓系统&#xff0c;后期可以OTA更多的互联互通Flyme for watch1 优化上魅族watch更是采用手机端的出色理念&#xff0c;One Mind是功能细化&#xff0c;提升刷新率&#xff0c;提升了百分之70续航&#xff0c;续航足够36小时。将刷新率提升至60Hz&…...

魅族怎么更改html,魅族手机浏览器兼容性调优最佳实践_html/css_WEB-ITnose

问题一、非 position:absolute 容器 height:100% 不生效&#xff0c;导致 bottom 定位错位截图1&#xff1a;容器实际高度渲染为0截图2&#xff1a;节点1 样式中包含了 position:relative ; height:100%; 但在魅族手机浏览器中高度被渲染为0节点2 定义了 bottom:-140px; 定位出…...

魅族网站开头

今天半日写出来的&#xff0c;感觉好慢&#xff0c;锚点定位真是磨了我好长时间 再再复习一下 1.定位 relative 相对定位 当子级是absolute时&#xff0c;应该给父级一个relative absolute 绝对定位 要有父级&#xff0c;根据父级的定位而定位 fixed 固定定位 固定在某一个位…...

光控RGB人体感应单片机探头PIR热释电红外定制方案

光控RGB人体感应单片机探头PIR热释电红外定制方案 PIR热释电红外人体感应光控RGB马桶灯定制方案批量出货功能可调 3节1.5V 干电池供电 上电RGB亮灯120S。&#xff08;光控下上电&#xff0c;亮500ms后灭灯休眠&#xff09; 感应亮灯120S&#xff0c;可重复触发 光控优先&a…...

PIR热释电红外人体感应IC

PIR热释电红外人体感应IC 型号 工作 电压 待机电流 LDO 输出电压 LDO 输出电流 运放增益 运放共模 抑制比 封装 特点 BISS00013.0-5.0V,耐压6.0V50uA60dB60dBSOP16具有独立的高输入阻抗运算放大器&#xff0c;可与多种传感器匹配&#xff0c;进行信号与处理&#xf…...

【ESP 保姆级教程】 疯狂传感器篇 —— 案例:ESP8266 + 人体红外热释电模块(HC-SR501) + 串口输出

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-05-02 ❤️❤️ 本篇更新记录 2022-05-02 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

Windows多线程编程

一、 实验内容或题目&#xff1a; 以多线程编程的方式完成&#xff1a; 1&#xff09;随机生成一个数组&#xff0c;求其平均值 2&#xff09;随机生成一个数组&#xff0c;求其最大值 3&#xff09;随机生成一个数组&#xff0c;求其最小值 二、 实验目的与要求&#xff1a;…...

Kinect体感互动解决方案——体感人影粒子

体感人影粒子互动系统&#xff0c;利用kinect投影设备&#xff0c; 来感应站在LED大屏幕周边辐射范围内的体验者&#xff0c;当体验者在它面前通过身体进行摆动&#xff0c;闪烁亮光粒子影像随着人的出现及运动被挥洒开来&#xff0c;自然流畅&#xff0c;缤纷绚丽。 佩京人影粒…...

html5体感游戏,分享:2017年最受欢迎的十大体感互动游戏

互动沙滩&#xff1a;小朋友置身虚拟现实的海洋场景中&#xff0c;沙滩边散落投影着时隐时现的海星、贝壳、海螺&#xff0c;还有可寄放小朋友捕捞成果的鱼缸。涛声轻柔&#xff0c;波光亮丽&#xff0c;放眼望去&#xff0c;一派滨海风光。2.互动蹦床&#xff1a;玩家通过弹跳…...

android体感软件,基于Android系统的体感运动游戏平台

摘要&#xff1a;体感运动游戏的概念特指用身体去感受和互动的游戏,不同于使用游戏摇杆,键盘,鼠标来控制游戏,引入多种传感设备来代替传统的手柄或键盘操作.体感运动游戏采用识别人体动作的输入方式.比如在网球游戏中,手中的手柄好像网球拍一样,玩家可以做出任意动作;在跑步游戏…...