- Linux系统编程(10)线程资源回收和互斥锁
流殇258
java开发语言
一、pthread_cancel函数pthread_cancel函数用于请求取消一个线程。当调用pthread_cancel时,它会向指定的线程发送一个取消请求。#includeintpthread_cancel(pthread_tthread);thread:要发送取消请求的线程标识符。成功时,返回0。失败时,返回一个错误号二、pthread_detach函数pthread_detach用于将线
- Linux线程 分离和同步与互斥 条件变量
yualian
linuxc语言服务器
Linux线程分离和同步与互斥条件变量1.分离线程2.线程互斥与互斥量3.线程同步与竞态条件4.pthread库与条件变量5.生产者-消费者1.分离线程什么是线程分离?线程分离是指线程在结束时,操作系统会自动回收其资源,而无需其他线程显式地等待它的结束或调用pthread_join函数。这种机制允许主线程不必关心子线程的状态,从而提高程序的并发性和可维护性。pthread_detach函数pthr
- 两个线程实现同步代码
Huai1230
c#
#include//1、定义条件变量pthread_cond_tcond;//11、定义互斥锁pthread_mutex_tmutex;//定义生产者线程void*task1(void*arg){sleep(1);printf("%#lx:生产了四辆小鹏汽车\n",pthread_self());//3、唤醒等待队列中的所有线程pthread_cond_broadcast(&cond);//退出线
- DPDK初始化
phone1126
linux
rte_eal_init│├──rte_cpu_is_supported:检查cpu是否支持│├──rte_atomic32_test_and_set:操作静态局部变量run_once确保函数只执行一次│├──pthread_self()获取主线程的线程ID,只是用于打印│├──eal_reset_internal_config:初始化内部全局配置变量structinternal_config│├
- Linux:获取线程的PID(TID、LWP)的几种方式
test1280
C-C++Linux其他分类线程PID线程TID线程LWP轻量级进程进程PID
Linux:获取线程的PID(TID、LWP)的几种方式在LinuxC/C++中通常是通过pthread库进行线程级别的操作。在pthread库中有函数:pthread_tpthread_self(void);它返回一个pthread_t类型的变量,指代的是调用pthread_self函数的线程的“ID”。怎么理解这个“ID”呢?这个“ID”是pthread库给每个线程定义的进程内唯一标识,是pt
- 互斥同步机制
愤怒的秃头鸟
java开发语言
1.思维导图2.互斥机制的演示#includecharstr[20];//创建互斥锁pthread_mutex_tmutex;//子线程void*task(void*arg){printf("子程序:tid=%#lx\n",pthread_self());inti=0;while(icharstr[100];//创建一个无名信号量、sem_tsem;//线程1(生产者)void*task1(voi
- 线程的创建与回收
ssz__
Linux学习笔记开发语言linux学习ubuntu
目录一、线程的创建进程:线程:线程特点:一个进程中的多个线程共享以下资源:每个线程私有的资源包括:Linux线程库:线程创建-pthread_create二、线程的参数传递线程结束-pthread_exit线程查看tid函数三、线程的回收线程回收-pthread_join:线程分离pthread_detach:四、线程回收内存演示一、线程的创建进程:进程有独立的地址空间Linux为每个进程创建ta
- linux线程重启
weixin_38849487
linuxpython运维
以下是获取线程id和重启指定线程的示例代码:#include#include//线程函数,用来打印线程IDvoid*print_thread_id(void*arg){printf("ThreadID:%lu\n",pthread_self());returnNULL;}intmain(){inti;pthread_tthreads[5];//创建5个线程,并获取线程IDfor(i=0;i#inc
- 基于多反应堆的高并发服务器【C/C++/Reactor】(中)线程池的启动和从线程池中取出一个反应堆实例
呵呵哒( ̄▽ ̄)"
基于多反应堆的高并发服务器C/C++/Reactor
一、线程池的启动//启动线程池voidthreadPoolRun(structThreadPool*pool){assert(pool&&!pool->isStart);if(pool->mainLoop->threadID!=pthread_self()){exit(0);}pool->isStart=true;if(pool->threadNum){for(inti=0;ithreadNum;
- 线程的资源回收:pthread_detach与pthread_cleanup_push/pthread_cleanup_pop的组合
symsyq
开发语言linuxc语言
线程退出单个线程可以通过3种方式退出,因此可以在不终止整个进程的情况下,停止它的控制流。1)线程可以简单地执行完后结束,返回值是线程的退出码。2)线程可以被同一进程中的其他线程用pthread_cancel所取消。3)线程调用pthread_exit。线程退出时需要回收资源,一方面回收线程本身的资源,另一方面还需要回收线程使用的特殊资源,例如互斥锁(回收互斥锁,也就是解锁),malloc开辟的空间
- pthread_detach(pthread_self())是一个用于将当前线程设置为分离状态的函数调用
Respect@
计算机Linux进阶笔记开发语言
pthread_detach(pthread_self())是一个用于将当前线程设置为分离状态的函数调用。具体解释如下:pthread_self():pthread_self是一个pthread库中的函数,用于获取当前线程的线程ID。pthread_detach():pthread_detach是一个pthread库中的函数,用于将线程设置为分离状态。分离状态的线程在退出时会自动释放资源,无需显式
- 浅析Linux之线程
飞翔的杨先生
linuxc语言开发语言物联网
目录概述程序进程线程区别特点线程共享资源线程非共享资源线程的优缺点线程号线程号查看是否有线程函数列表命令安装获取线程号pthread_self函数概述程序可执行文件进程操作系统分配资源的最小单位线程CPU调度的最小单位所以,线程是轻量级的进程(LWP:lightweightprocess),在Linux环境下线程的本质仍是进程。为了让进程完成一定的工作,进程必须至少包含一个线程。区别内核不区别,本
- 【阿里云】图像识别 智能分类识别 增加垃圾桶开关盖功能点和OLED显示功能点(二)
咖喱年糕
全志H616阿里云云计算图像识别语音识别pythonc语言vscode
一、增加垃圾桶开关盖功能环境准备二、PWM频率的公式三、pthread_detach分离线程,使其在退出时能够自动释放资源四、具体代码实现图像识别数据及调试信息wget-log打印日志文件五、增加OLED显示功能六、功能点实现语音交互视频一、增加垃圾桶开关盖功能实现功能:使用语音模块和摄像头在香橙派上做垃圾智能分类识别,同时根据识别结果开关不同的垃圾桶的盖子。环境准备在《语音模块和阿里云图像识别结
- Linux C 线程
江玖_
linuxlinuxc语言线程
线程概述线程和进程的异同如何选择使用进程还是线程函数获取进程自身ID pthread_self创建线程 pthread_create退出线程 pthread_exit线程等待 pthread_join四种线程模型1)单线程2)单线程3)双线程4)三线程概述 线程(英语:thread)是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,是进程中的实际运作单位。
- linux线程间的通信(pthread_cleanup_push和pthread_cleanup_pop,pthread_join,pthread_detach)
panamera12
线程可以安排他退出时需要调用的函数,这与进程可以用atexit函数安排进程退出时需要调用的函数是类似的。这样的函数称为线程清理处理程序,线程可以建立多个清理处理程序。处理程序记录在栈中,也就是说他们的执行顺序与他们注册的顺序相反。pthread_cleanup_push和pthread_cleanup_pop函数原型如下:头文件:#include函数原型:voidpthread_cleanup_p
- Linux c/c++服务器开发实践
有趣的我
服务器linuxc语言c++
在LinuxC++开发环境中,通常有两种方式来开发多线程程序,一种是利用POSIX多线程API函数来开发多线程程序,另外一种是利用C++自带线程类来开发程序。常见的与线程相关的基本API函数:API函数含义pthread_create创建线程pthread_exit线程终止自身执行pthread_join等待一个线程的结束pthread_self获取线程IDpthread_cancel取消另外一个
- 线程共享内存空间的代码验证
XXX_MRX
Linux系统编程——线程linuxc语言
在前面介绍线程时讲了线程是共享进程的内存空间的,接下来就举个代码示例进一步验证。#include#includeintg_data=0;void*func1(void*arg){printf("t1:%ldthreadiscreart\n",(unsignedlong)pthread_self());printf("t1:paramis%d\n",*((int*)arg));while(1){pr
- 5.5 其他方法
Mega_Li
c语言Pthreads
pthread_self()pthread_equal(thread1,thread2)pthread_self返回调用该方法的线程独有的,被系统分配的id;pthread_equal比较两个线程的id,如果不同返回0,否则返回非0值。注意由于线程的id对象为不透明的类型,我们无法直接使用C语言中的==来判断两个线程id是否相等,或者把id和其他的数值做比较。pthread_once(once_c
- 5.3 连接和分离线程
Mega_Li
Pthreadsc语言
方法pthread_join(thread,status)pthread_detach(thread)pthread_attr_setdetachstate(attr,detachstate)pthread_attr_getdetachstate(attr)连接连接(joining)是一种线程之间完成同步的方法,举例如下。pthread_join()方法会阻塞调用它的线程,直到相关的线程终止运行。
- Linux中的pid tid thread_id
IvanGuan
你是不是也被pid,tid,thread_id这三个东西弄晕了。每个进程都有数自己的pid,可以用getpid()得到的。同样在我们调用pread_create的系统也线程分配了thread_id,可以使用pthread_self()得到。但是除了这两个id还有一个id比较特殊即线程的PID。在内核中,每个线程都有自己的PID,要得到线程的PID,必须用syscall(SYS_gettid);实
- linux--线程共享内存
清源子呀
嵌入式Linux学习linuxc语言
Linux线程共享内存空间是指多个线程可以访问同一个内存区域,这些线程共享该内存区域的内容。代码:#include#include//sharememoryintdata=0;//定义一个全局变量datavoid*fun1(void*arg){printf("t1:threadidis:%ld\n",(unsignedlong)pthread_self());printf("t1:isparam:
- pthead 创建与销毁详解 pthread_create pthread_join pthread_exit pthread_detach
luohaha66
并发编程linuxc语言
pthead创建与销毁pthread_create函数原型:intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg);thread:指向pthread_t类型的指针,用于存储新线程的标识符。attr:指向pthread_attr_t类型的指针,用于设置新线程的
- linux c 获取进程p id,详解Linux获取线程的PID(TID、LWP)的几种方式
Effie Zzz
linuxc获取进程pid
在LinuxC/C++中通常是通过pthread库进行线程级别的操作。在pthread库中有函数:pthread_tpthread_self(void);它返回一个pthread_t类型的变量,指代的是调用pthread_self函数的线程的“ID”。怎么理解这个“ID”呢?这个“ID”是pthread库给每个线程定义的进程内唯一标识,是pthread库维持的。由于每个进程有自己独立的内存空间,故
- 零基础Linux_22(多线程)线程控制和和C++的多线程和笔试选择题
GR_C
⑥零基础Linux操作系统linux运维c++1024程序员节
目录1.线程控制1.1线程创建(pthread_create)1.2线程结束(pthread_exit)1.3线程等待(pthread_join)1.4线程取消(pthread_cancel结束)1.5线程tid(pthread_self())1.6线程局部存储(__thread)1.7线程分离(pthread_detach)2.C++的多线程3.笔试选择题答案及解析本篇完。1.线程控制上一篇讲了
- pthread_detach(pthread_self());
Respect@
计算机Linux进阶笔记开发语言c++服务器nginx
这个函数的作用是将当前线程设置为分离状态(detached)。分离状态的线程,在结束时会自动释放资源,无需其他线程对其进行pthread_join()等等的操作。pthread_detach(pthread_self())的意思是将当前线程自身设置为分离状态。pthread_self()是获取当前线程ID的函数,然后pthread_detach()用获取的线程ID作为参数来将该线程设置为分离状态。
- 并发编程用到的函数解析
有名企梦的小菜鸡
csapp的Lab学习服务器数据库学习计算机网络
文章目录前言一、sbuf_init二、Pthread_create三、Pthread_detach四、sbuf_remove五、sbuf_insert总结前言备战CSAPP中的ProxyLab时解析书上的并发编程中遇到了一些不会的函数,遂解析记录。一、sbuf_init为缓冲区分配堆内存,设置front和rear表示一个空的缓冲区,并为三个信号量赋初始值。Rio_readinitb(&rio,fd
- C语言线程基本函数
阿诏阿詔Auyv
c语言
学习笔记:C语言线程基本函数学习内容:线程常用基本函数:pthread_create()创建线程pthread_exit()退出当前线程pthread_join()等待其他线程结束pthread_self()自身线程ID号pthread_cancel()停止其他线程pthread_detach()分离某个线程学习笔记:线程使用需要导入对应头文件#includepthread_create()创建线
- [Linux]多线程编程
好想写博客
Linuxlinuxc语言运维服务器
[Linux]多线程编程文章目录[Linux]多线程编程pthread_create函数pthread_join函数pthread_exit函数pthread_cancel函数pthread_self函数pthread_detach函数理解线程库和线程idLinux操作系统下,并没有真正意义上的线程,而是由进程中的轻量级进程(LWP)模拟的线程,因此Linux操作系统中只会提供进程操作的系统接口。
- 函数简介篇——线程相关函数
惺忪牛犊子
嵌入式函数简介linuxunixc语言
说明:目录:一、线程基本操作函数pthread_equal()——比较线程IDpthread_self()——获取调用线程的IDpthread_create()——创建线程pthread_exit()——结束线程pthread_join()——阻塞线程pthread_cancel()——取消线程pthread_detach()——分离线程线程清理函数pthread_cleanup_push()——
- Linux--线程 共享内存空间
小小的个子
Linuxlinux数据结构算法
线程_共享内存空间//线程_共享内存空间#include#includeintg_data=0;void*func1(void*arg){printf("t1:%ldthreadiscreate!\n",(unsignedlong)pthread_self());printf("t1:paramis%d\n",*((int*)arg));while(1){printf("t1:%d\n",g_da
- JVM StackMapTable 属性的作用及理解
lijingyao8206
jvm字节码Class文件StackMapTable
在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack Map Table。在Java 7版
- 回调函数调用方法
百合不是茶
java
最近在看大神写的代码时,.发现其中使用了很多的回调 ,以前只是在学习的时候经常用到 ,现在写个笔记 记录一下
代码很简单:
MainDemo :调用方法 得到方法的返回结果
- [时间机器]制造时间机器需要一些材料
comsci
制造
根据我的计算和推测,要完全实现制造一台时间机器,需要某些我们这个世界不存在的物质
和材料...
甚至可以这样说,这种材料和物质,我们在反应堆中也无法获得......
 
- 开口埋怨不如闭口做事
邓集海
邓集海 做人 做事 工作
“开口埋怨,不如闭口做事。”不是名人名言,而是一个普通父亲对儿子的训导。但是,因为这句训导,这位普通父亲却造就了一个名人儿子。这位普通父亲造就的名人儿子,叫张明正。 张明正出身贫寒,读书时成绩差,常挨老师批评。高中毕业,张明正连普通大学的分数线都没上。高考成绩出来后,平时开口怨这怨那的张明正,不从自身找原因,而是不停地埋怨自己家庭条件不好、埋怨父母没有给他创造良好的学习环境。
- jQuery插件开发全解析,类级别与对象级别开发
IT独行者
jquery开发插件 函数
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给
jQuery添加新的全局函数,相当于给
jQuery类本身添加方法。
jQuery的全局函数就是属于
jQuery命名空间的函数,另一种是对象级别的插件开发,即给
jQuery对象添加方法。下面就两种函数的开发做详细的说明。
1
、类级别的插件开发 类级别的插件开发最直接的理解就是给jQuer
- Rome解析Rss
413277409
Rome解析Rss
import java.net.URL;
import java.util.List;
import org.junit.Test;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.S
- RSA加密解密
无量
加密解密rsa
RSA加密解密代码
代码有待整理
package com.tongbanjie.commons.util;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerat
- linux 软件安装遇到的问题
aichenglong
linux遇到的问题ftp
1 ftp配置中遇到的问题
500 OOPS: cannot change directory
出现该问题的原因:是SELinux安装机制的问题.只要disable SELinux就可以了
修改方法:1 修改/etc/selinux/config 中SELINUX=disabled
2 source /etc
- 面试心得
alafqq
面试
最近面试了好几家公司。记录下;
支付宝,面试我的人胖胖的,看着人挺好的;博彦外包的职位,面试失败;
阿里金融,面试官人也挺和善,只不过我让他吐血了。。。
由于印象比较深,记录下;
1,自我介绍
2,说下八种基本类型;(算上string。楼主才答了3种,哈哈,string其实不是基本类型,是引用类型)
3,什么是包装类,包装类的优点;
4,平时看过什么书?NND,什么书都没看过。。照样
- java的多态性探讨
百合不是茶
java
java的多态性是指main方法在调用属性的时候类可以对这一属性做出反应的情况
//package 1;
class A{
public void test(){
System.out.println("A");
}
}
class D extends A{
public void test(){
S
- 网络编程基础篇之JavaScript-学习笔记
bijian1013
JavaScript
1.documentWrite
<html>
<head>
<script language="JavaScript">
document.write("这是电脑网络学校");
document.close();
</script>
</h
- 探索JUnit4扩展:深入Rule
bijian1013
JUnitRule单元测试
本文将进一步探究Rule的应用,展示如何使用Rule来替代@BeforeClass,@AfterClass,@Before和@After的功能。
在上一篇中提到,可以使用Rule替代现有的大部分Runner扩展,而且也不提倡对Runner中的withBefores(),withAfte
- [CSS]CSS浮动十五条规则
bit1129
css
这些浮动规则,主要是参考CSS权威指南关于浮动规则的总结,然后添加一些简单的例子以验证和理解这些规则。
1. 所有的页面元素都可以浮动 2. 一个元素浮动后,会成为块级元素,比如<span>,a, strong等都会变成块级元素 3.一个元素左浮动,会向最近的块级父元素的左上角移动,直到浮动元素的左外边界碰到块级父元素的左内边界;如果这个块级父元素已经有浮动元素停靠了
- 【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景
bit1129
partition
0.Kafka服务器配置
3个broker
1个topic,6个partition,副本因子是2
2个consumer,每个consumer三个线程并发读取
1. Producer
package kafka.examples.multibrokers.producers;
import java.util.Properties;
import java.util.
- zabbix_agentd.conf配置文件详解
ronin47
zabbix 配置文件
Aliaskey的别名,例如 Alias=ttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]+),,,,\1], 或者ttlsa的用户ID。你可以使用key:vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]+),,,,\1],也可以使用ttlsa.userid。备注: 别名不能重复,但是可以有多个
- java--19.用矩阵求Fibonacci数列的第N项
bylijinnan
fibonacci
参考了网上的思路,写了个Java版的:
public class Fibonacci {
final static int[] A={1,1,1,0};
public static void main(String[] args) {
int n=7;
for(int i=0;i<=n;i++){
int f=fibonac
- Netty源码学习-LengthFieldBasedFrameDecoder
bylijinnan
javanetty
先看看LengthFieldBasedFrameDecoder的官方API
http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html
API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下:
实
- AES加密解密
chicony
加密解密
AES加解密算法,使用Base64做转码以及辅助加密:
package com.wintv.common;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decod
- 文件编码格式转换
ctrain
编码格式
package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
- mysql 在linux客户端插入数据中文乱码
daizj
mysql中文乱码
1、查看系统客户端,数据库,连接层的编码
查看方法: http://daizj.iteye.com/blog/2174993
进入mysql,通过如下命令查看数据库编码方式: mysql> show variables like 'character_set_%'; +--------------------------+------
- 好代码是廉价的代码
dcj3sjt126com
程序员读书
长久以来我一直主张:好代码是廉价的代码。
当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。
当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。”
我只
- Android网络请求库——android-async-http
dcj3sjt126com
android
在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通
- ORACLE 复习笔记之SQL语句的优化
eksliang
SQL优化Oracle sql语句优化SQL语句的优化
转载请出自出处:http://eksliang.iteye.com/blog/2097999
SQL语句的优化总结如下
sql语句的优化可以按照如下六个步骤进行:
合理使用索引
避免或者简化排序
消除对大表的扫描
避免复杂的通配符匹配
调整子查询的性能
EXISTS和IN运算符
下面我就按照上面这六个步骤分别进行总结:
- 浅析:Android 嵌套滑动机制(NestedScrolling)
gg163
android移动开发滑动机制嵌套
谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性
NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]-->
比如你使用了Toolbar,下面一个ScrollView,向上滚
- 使用hovertree菜单作为后台导航
hvt
JavaScriptjquery.nethovertreeasp.net
hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。
0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm
hovertree插件包含文件:
http://keleyi.com/jq/hovertree/css
- SVG 教程 (二)矩形
天梯梦
svg
SVG <rect> SVG Shapes
SVG有一些预定义的形状元素,可被开发者使用和操作:
矩形 <rect>
圆形 <circle>
椭圆 <ellipse>
线 <line>
折线 <polyline>
多边形 <polygon>
路径 <path>
- 一个简单的队列
luyulong
java数据结构队列
public class MyQueue {
private long[] arr;
private int front;
private int end;
// 有效数据的大小
private int elements;
public MyQueue() {
arr = new long[10];
elements = 0;
front
- 基础数据结构和算法九:Binary Search Tree
sunwinner
Algorithm
A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all
- 项目出现的一些问题和体会
Steven-Walker
DAOWebservlet
第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。
这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。
dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。
&
- 高手问答:Java老A带你全面提升Java单兵作战能力!
ITeye管理员
java
本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论!
作者简介:
淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。
CSDN博客地址:
http://blog.csdn.net/xieyuooo
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,