学习空闲任务函数
一、user_StopEnterTask 停止 进入任务
/* Private includes -----------------------------------------------------------*/
//includes
#include "user_TasksInit.h"
#include "user_MPUCheckTask.h"#include "ui.h"
#include "ui_HomePage.h"
#include "ui_OffTimePage.h"#include "main.h"
#include "stm32f4xx_it.h"
#include "lcd_init.h"
#include "CST816.h"
#include "key.h"/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private variables ---------------------------------------------------------*/
uint16_t IdleTimerCount = 0;/* Private function prototypes -----------------------------------------------*//* Tasks ---------------------------------------------------------------------*//*** @brief Enter Idle state* @param argument: Not used* @retval None*/
void IdleEnterTask(void *argument)
{uint8_t Idlestr=0;uint8_t IdleBreakstr=0;while(1){//light get darkif(osMessageQueueGet(Idle_MessageQueue,&Idlestr,NULL,1)==osOK){LCD_Set_Light(5);}//resume light if light got dark and idle state breaked by key pressing or screen touchingif(osMessageQueueGet(IdleBreak_MessageQueue,&IdleBreakstr,NULL,1)==osOK){IdleTimerCount = 0;LCD_Set_Light(ui_LightSliderValue);}osDelay(10);}
}/*** @brief enter the stop mode and resume* @param argument: Not used* @retval None*/
void StopEnterTask(void *argument)
{uint8_t Stopstr;uint8_t HomeUpdataStr;uint8_t Wrist_Flag=0;while(1){if(osMessageQueueGet(Stop_MessageQueue,&Stopstr,NULL,0)==osOK){/***** your sleep operations *****/sleep:IdleTimerCount = 0;//sensors//lcdLCD_RES_Clr();LCD_Close_Light();//touchCST816_Sleep();/*********************************/vTaskSuspendAll();//Disnable Watch Dog//WDOG_Disnable();//systick intCLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);//enter stop modeHAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);//here is the sleep period//resume run mode and reset the sysclkSET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));SystemClock_Config();//WDOG_Feed();xTaskResumeAll();/***** your wakeup operations *****//*//MPU Checkif(user_MPU_Wrist_EN){uint8_t hor;hor = MPU_isHorizontal();if(hor && user_MPU_Wrist_State == WRIST_DOWN){user_MPU_Wrist_State = WRIST_UP;Wrist_Flag = 1;//resume, go on}else if(!hor && user_MPU_Wrist_State == WRIST_UP){user_MPU_Wrist_State = WRIST_DOWN;IdleTimerCount = 0;goto sleep;}}*///if(!KEY1 || HardInt_Charg_flag || Wrist_Flag){Wrist_Flag = 0;//resume, go on}else{IdleTimerCount = 0;goto sleep;}//lcdLCD_Init();LCD_Set_Light(ui_LightSliderValue);//touchCST816_Wakeup();//check if is Charging/*if(ChargeCheck()){HardInt_Charg_flag = 1;}*///send the Home Updata messageosMessageQueuePut(HomeUpdata_MessageQueue, &HomeUpdataStr, 0, 1);/**********************************/}osDelay(100);}
}void IdleTimerCallback(void *argument)
{IdleTimerCount+=1;//make sure the LightOffTime<TurnOffTimeif(IdleTimerCount == (ui_LTimeValue*10)){uint8_t Idlestr=0;//send the Light off messageosMessageQueuePut(Idle_MessageQueue, &Idlestr, 0, 1);}if(IdleTimerCount == (ui_TTimeValue*10)){uint8_t Stopstr = 1;IdleTimerCount = 0;//send the Stop messageosMessageQueuePut(Stop_MessageQueue, &Stopstr, 0, 1);}
}
1.1 头文件包含部分
#include "user_TasksInit.h"
#include "user_MPUCheckTask.h"#include "ui.h"
#include "ui_HomePage.h"
#include "ui_OffTimePage.h"#include "main.h"
#include "stm32f4xx_it.h"
#include "lcd_init.h"
#include "CST816.h"
#include "key.h"
user_TasksInit.h
包含了任务初始化相关的函数声明、结构体等,用于初始化整个系统中的各种任务,确保各个任务能正常启动和运行
user_MPUCheckTask.h
应该是检查MPU6050 核心板没用到
ui.h
、ui_HomePage.h
、ui_OffTimePage.h
这些头文件应该是和用户界面不同页面相关的定义
main.h
通常包含主程序模块相关的一些通用定义,例如全局变量声明、主函数中使用到的宏等。
stm32f4xx_it.h
一般是 STM32F4 系列单片机的中断相关的头文件,可能包含了中断服务函数的声明以及一些与中断处理相关的宏定义等内容,用于处理单片机的各种中断事件。
lcd_init.h
应该是与 LCD 显示屏初始化及相关操作有关的头文件,里面会有 LCD
初始化函数(如 LCD_Init
)以及亮度设置函数(如 LCD_Set_Light
)等的声明,用于控制显示屏的显示状态。
CST816.h
推测是与触摸传感器(可能是型号为 CST816 的触摸芯片)相关的头文件,包含触摸传感器的操作函数声明,如睡眠(CST816_Sleep
)、唤醒(CST816_Wakeup
)等函数,用于管理触摸功能的开启和关闭。
key.h
很可能包含了按键相关的函数声明,像按键扫描函数等,以及按键引脚定义等与硬件按键相关的内容,用于检测按键操作情况。
uint16_t IdleTimerCount = 0;
定义了一个 uint16_t
类型的全局变量 IdleTimerCount
,初始值设为 0
。从后续代码来看,这个变量用于计时,可能是记录设备处于空闲状态的时长,通过与不同的时间阈值(如 ui_LTimeValue
和 ui_TTimeValue
)进行比较,来决定是否执行相应的操作,比如关闭屏幕灯光或者进入停止模式等
1.2 IdleEnterTask函数
空闲任务(用于调节屏幕亮度)
void IdleEnterTask(void *argument)
{uint8_t Idlestr = 0;uint8_t IdleBreakstr = 0;while (1){//light get darkif (osMessageQueueGet(Idle_MessageQueue, &Idlestr, NULL, 1) == osOK){LCD_Set_Light(5);}//resume light if light got dark and idle state breaked by key pressing or screen touchingif (osMessageQueueGet(IdleBreak_MessageQueue, &IdleBreakstr, NULL, 1) == osOK){IdleTimerCount = 0;LCD_Set_Light(ui_LightSliderValue);}osDelay(10);}
}
定义了两个 uint8_t
类型的局部变量 Idlestr
和 IdleBreakstr
,初始值都设为 0
,它们可能用于接收来自消息队列的相关消息内容,以判断设备的状态变化情况。
当通过 osMessageQueueGet
函数从 Idle_MessageQueue
消息队列中成功获取到消息(返回值为 osOK
)时,会执行 LCD_Set_Light(5)
语句,即将 LCD 的亮度设置为 5,这可能表示在接收到特定的空闲相关消息后,调暗屏幕亮度,使屏幕灯光变暗(具体亮度值的含义取决于 LCD_Set_Light
函数的实现和项目中的亮度设定标准)。
当从 IdleBreak_MessageQueue
消息队列中成功获取到消息时,首先将 IdleTimerCount
清零,意味着设备的空闲计时重新开始,然后通过 LCD_Set_Light(ui_LightSliderValue)
将 LCD 的亮度设置为用户界面上设置的亮度滑块值所对应的亮度,这表示当设备从空闲被打断(比如通过按键按下或者屏幕触摸操作)后,恢复屏幕到之前用户设定的亮度。
我理解的是一个消息队列用于使屏幕变暗,估计是osMessageQueueGet
获得值,另一个消息队列是用于触发唤醒屏幕。进入空闲状态就息屏省电
1.3 StopEnterTask
函数
定义了三个 uint8_t
类型的局部变量 Stopstr
、HomeUpdataStr
和 Wrist_Flag
,分别用于接收消息队列中的消息、可能用于后续向其他任务发送更新首页相关的消息以及作为一个标志来记录与设备姿态(手腕相关,从代码中对 MPU
和手腕状态的处理推测)有关的情况,初始时 Wrist_Flag
设为 0
if (osMessageQueueGet(Stop_MessageQueue, &Stopstr, NULL, 0) == osOK)
同样是一个无限循环 while(1)
,持续检测 Stop_MessageQueue
消息队列中的消息,以决定是否进入停止模式以及后续的唤醒操作等相关处理。
这里有个sleep 估计是要用到goto语句吗?
sleep:IdleTimerCount = 0;//sensors//lcdLCD_RES_Clr();LCD_Close_Light();//touchCST816_Sleep();/*********************************/vTaskSuspendAll();//Disnable Watch Dog//WDOG_Disnable();//systick intCLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);//enter stop modeHAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);//here is the sleep period//resume run mode and reset the sysclkSET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));SystemClock_Config();//WDOG_Feed();xTaskResumeAll();
先将 IdleTimerCount
清零,用于重置空闲计时(因为即将进入停止模式,相当于空闲状态结束)。然后对各个硬件设备进行相应的关闭或睡眠操作,包括对 LCD 显示屏进行复位引脚操作(LCD_RES_Clr
)和关闭灯光(LCD_Close_Light
),以及让触摸传感器进入睡眠模式(CST816_Sleep
),这些操作都是为了降低设备在停止模式下的功耗。
通过 vTaskSuspendAll
函数暂停所有任务(在支持任务管理的操作系统环境下),接着进行一些与系统时钟和看门狗相关的操作(虽然部分代码被注释掉了,像禁用看门狗 WDOG_Disnable
,但整体思路是进行进入停止模式前的系统准备工作),然后通过 CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk)
操作关闭系统滴答定时器中断(SysTick
相关操作),最后使用 HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI)
函数进入停止模式(这里选择了主调节器开启以及等待中断唤醒的方式进入停止模式,具体的电源模式和唤醒方式可根据实际硬件和项目需求选择)。
/***** your wakeup operations *****//*//MPU Checkif (user_MPU_Wrist_EN){uint8_t hor;hor = MPU_isHorizontal();if (hor && user_MPU_Wrist_State == WRIST_DOWN){user_MPU_Wrist_State = WRIST_UP;Wrist_Flag = 1;//resume, go on}else if (!hor && user_MPU_Wrist_State == WRIST_UP){user_MPU_Wrist_State = WRIST_DOWN;IdleTimerCount = 0;goto sleep;}}*///if (!KEY1 || HardInt_Charg_flag || Wrist_Flag){Wrist_Flag = 0;//resume, go on}else{IdleTimerCount = 0;goto sleep;}//lcdLCD_Init();LCD_Set_Light(ui_LightSliderValue);//touchCST816_Wakeup();//check if is Charging/*if (ChargeCheck()){HardInt_Charg_flag = 1;}*///send the Home Updata messageosMessageQueuePut(HomeUpdata_MessageQueue, &HomeUpdataStr, 0, 1);/**********************************/
这里有一部分代码被注释掉了,原本是关于 MPU
(根据陀螺仪,可能用于检测设备姿态,比如手腕是朝上还是朝下)的检测逻辑,根据 MPU
检测到的设备水平状态以及之前记录的手腕状态(user_MPU_Wrist_State
,虽然其赋值等操作在当前代码片段不太完整)来决定是否更新手腕状态标志以及是否再次进入睡眠(通过 goto sleep
语句)。
之后的代码根据不同条件判断来决定是否继续执行后续操作还是再次进入睡眠(通过判断按键 KEY1
是否按下、充电标志 HardInt_Charg_flag
是否为真以及 Wrist_Flag
的值等情况)。如果满足相应条件(比如按键按下或者正在充电等),则将 Wrist_Flag
清零,准备继续正常运行;否则,将 IdleTimerCount
清零并通过 goto sleep
语句再次进入停止模式相关的睡眠操作。
最后,对硬件设备进行重新初始化和唤醒操作,包括初始化 LCD 显示屏(LCD_Init
)并设置其亮度为用户界面设定的亮度值(LCD_Set_Light(ui_LightSliderValue)
),唤醒触摸传感器(CST816_Wakeup
),并且可以根据需要检查设备是否正在充电(代码中相关部分被注释掉了),
最后通过 osMessageQueuePut
函数向 HomeUpdata_MessageQueue
消息队列发送一个消息(具体消息内容通过 HomeUpdataStr
传递,虽然目前代码中没有对其进行详细赋值等操作,但应该是用于通知其他任务首页相关的更新情况)。
osDelay(100);
在循环的末尾通过 osDelay(100)
函数让任务暂停 100
个时间单位(同样具体时间单位取决于操作系统配置),以合适的时间间隔来检测 Stop_MessageQueue
消息队列,避免过于频繁检测而占用过多资源,同时也能及时响应进入停止模式的相关消息
1.4 IdleTimerCallback
空闲时间回调函数
void IdleTimerCallback(void *argument)
{IdleTimerCount += 1;//make sure the LightOffTime<TurnOffTimeif (IdleTimerCount == (ui_LTimeValue * 10)){uint8_t Idlestr = 0;//send the Light off messageosMessageQueuePut(Idle_MessageQueue, &Idlestr, 0, 1);}if (IdleTimerCount == (ui_TTimeValue * 10)){uint8_t Stopstr = 1;IdleTimerCount = 0;//send the Stop messageosMessageQueuePut(Stop_MessageQueue, &Stopstr, 0, 1);}
}
函数每次被调用时,会将 IdleTimerCount
变量的值加 1
,用于对设备处于空闲状态的时长进行计时。然后通过两个 if
条件判断来决定是否发送相应的消息。
当 IdleTimerCount
的值等于 ui_LTimeValue
乘以 10
时(这里乘以 10
可能是因为计时单位和时间阈值的单位换算关系,具体取决于项目设定),会定义一个 uint8_t
类型变量 Idlestr
并初始化为 0
,然后通过 osMessageQueuePut
函数向 Idle_MessageQueue
消息队列发送这个消息,这可能是用于触发屏幕灯光调暗等相关的空闲操作(从 IdleEnterTask
函数中对 Idle_MessageQueue
消息的处理逻辑可推测)。
当 IdleTimerCount
的值等于 ui_TTimeValue
乘以 10
时,定义一个 uint8_t
类型变量 Stopstr
并赋值为 1
,接着将 IdleTimerCount
清零,再通过 osMessageQueuePut
函数向 Stop_MessageQueue
消息队列发送这个消息,这大概率是用于触发设备进入停止模式相关的操作(从 StopEnterTask
函数中对 Stop_MessageQueue
消息的处理逻辑可推测)
在空闲任务里的时常为 time1时间不操作就进入低亮度状态, 长时间 time2 不操作就进入停止状态,
回调函数作为重复启用的软件定时器的函数 100ms启用1次 也就是100ms计数值自加一次
osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr) {
uint8_t ui_LTimeValue = 10;if(IdleTimerCount == (ui_LTimeValue*10))
那ui_LTimeValue*10 = 100 那就是100ms*100=10s 10s空闲任务时间 就会让系统进入降低显示器屏幕的状态,15s进入关断状态 只能由按键 姿态 充电唤醒
相关文章:
学习空闲任务函数
一、user_StopEnterTask 停止 进入任务 /* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" #include "user_MPUCheckTask.h"#include "ui.h" #include "ui_Hom…...
Hyper-v中ubuntu与windows文件共享
Hyper-v中ubuntu与windows文件共享 前言相关链接第一步--第一个链接第二步--第二个链接测试与验证 前言 关于Hyper-V的共享我搞了好久,网上的很多教程太过冗余,我直接采用最简单的办法吧 相关链接 Hyper-V中Ubuntu 同windows系统共享文件夹-百度经验 …...
【软件工程】一篇入门UML建模图(类图)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...
Windows 安装Docker For Desktop概要
Windows 安装docker 下载部分的工作需要使用科学技术。如果没有可以联系博主发送已下载好的文件。 本文档不涉及技术的讲解,仅有安装的步骤。 准备工作 包含下载与环境准备,下载的文件仅下载,在后续步骤进行安装。 微软关于wsl的文档&…...
解决循环依赖报错问题
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘asyncTaskServiceImpl’: Bean with name ‘asyncTaskServiceImpl’ has been injected into other beans [resignServiceImpl] in its raw version as part…...
代码随想录第46期 单调栈
这道题主要是单调栈的简单应用 class Solution { public:vector<int> dailyTemperatures(vector<int>& T) {vector<int> result(T.size(),0);stack<int> st;st.push(0);for(int i1;i<T.size();i){if(T[i]<T[st.top()]){st.push(i);}else{wh…...
中仕公考怎么样?事业编面试不去有影响吗?
事业编考试笔试已经通过,但是面试不去参加会有影响吗? 1. 自动放弃面试资格:未能按时出席事业单位的面试将被视为主动放弃该岗位的竞争机会。 2. 个人信誉问题:面试作为招聘流程的关键步骤,无故缺席可能被解释为诚信…...
OMV7 树莓派 tf卡安装
升级7之后,问题多多,不是docker不行了,就是代理不好使 今天又重装了一遍,用官方的链接,重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置࿰…...
Go语言24小时极速学习教程(五)Go语言中的SpringMVC框架——Gin
作为一个真正能用的企业级应用,怎么能缺少RESTful接口呢?所以我们需要尝试在Go语言环境中写出我们的对外接口,这样前端就可以借由Gin框架访问我们数据库中的数据了。 一、Gin框架的使用 1. 安装 Gin 首先,你需要在你的 Go 项目…...
【汇编】c++游戏开发
由一起学编程创作的‘C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~’: C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~_射击c-CSDN博客文章浏览…...
Android Studio | 修改镜像地址为阿里云镜像地址,启动App
在项目文件的目录下的 settings.gradle.kts 中修改配置,配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…...
Rocky linux8 安装php8.0
Rocky linux8 安装php8.0 1.安装remi源2.列出php版本3.变更php版本,Rocky8有提供php8版本,所以切换Rocky8提供的版本,而不是remi提供的版本,不过remi有提供php8.1和php8.2版本。4.切换成remi提供的8.0版本5.安装phpendl 1.安装rem…...
Ubuntu 18 EDK2 环境编译
视频:在全新的Ubuntu上从零搭建UEFI的EDK2开发环境 开始:git clone https://github.com/tianocore/edk2.git 开始编译BaseTools前先更新一下子模块:git submodule update --init ,然后:make -C BaseTools/ 问题1&a…...
C语言项⽬实践-贪吃蛇
目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…...
智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁
近日,贵州省贵阳市中级人民法院对余华英拐卖儿童案做出了一审宣判,判处其死刑,剥夺政治权利终身,并处没收个人全部财产。这一判决不仅彰显了法律的威严,也再次唤起了社会对拐卖儿童犯罪的深切关注。 余华英自1993年至2…...
Spring:IoC/DI加载properties文件
Spring框架可以通过Spring的配置文件完成两个数据源druid和C3P0的配置(Spring:IOC/DI配置管理第三方bean),但是其中包含了一些问题,我们来分析下: 这两个数据源中都使用到了一些固定的常量如数据库连接四要素…...
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Docker 概述 1.1 Docker 主要组成部分 1.2 Docker 安装 2.0 Docker 常见命令 2.1 常见的命令介绍 2.2 常见的命令演示 3.0 数据卷 3.1 数据卷常见的命令 3.2 常见…...
深挖C++赋值
详解赋值 const int a 10; int b a;&a 0x000000b7c6afef34 {56496} &a 0x000000b7c6afef34 {10} 3. &b 0x000000b7c6afef54 {10} 总结: int a 10 是指在内存中(栈)中创建一个int (4 byte)大小的空间…...
【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载
软件介绍 下载iOS旧版应用,简化繁琐的抓包流程。 一键生成去更新IPA(手机安装后,去除App Store的更新检测)。 软件界面 支持系统 Windows 10/Windows 8/Windows 7(由于使用了Fiddler库,因此需要.Net环境…...
【python笔记02】面向对象思想
关于面向对象要学会啥? 面向对象编程思想面向对象基本概念 对象类 添加和获取对象属性魔术方法(三个常见的)面向对象案例 面向对象编程思想 两个时代的两个产物,没有好坏之分,小系统用面向过程,团队开发…...
Java基础-Java多线程机制
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…...
MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中
MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并–封装到存储过程中 我们的最终目的是什么?当然的自动执行这些合并操作! 上一篇 MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并 我们已经知道怎么合…...
MATLAB向量元素的引用
我们定义一个向量后,如果想引用的话,可以通过索引 i n d ind ind来实现。 注意:MATLAB中向量的开始索引是1,与许多编程语言不同。 例如: 如果想引用多个的话,可以用索引 i n d ind ind来提取多个位置 例如…...
leetcode-44-通配符匹配
题解: 代码: 参考: (1)牛客华为机试HJ71字符串通配符 (2)leetcode-10-正则表达式匹配...
基于YOLOv8深度学习的智慧课堂学生专注度检测系统(PyQt5界面+数据集+训练代码)
本研究提出了一种基于YOLOv8深度学习的智慧课堂学生专注度检测系统,旨在实现对课堂中学生专注度的实时分析与评估。随着智慧教育的快速发展,学生的课堂表现和专注度成为评估学习效果的重要因素之一。然而,传统的专注度评估方法往往依赖于主观…...
vue项目使用eslint+prettier管理项目格式化
代码格式化、规范化说明 使用eslintprettier进行格式化,vscode中需要安装插件ESLint、Prettier - Code formatter,且格式化程序选择为后者(vue文件、js文件要分别设置) 对于eslint规则,在格式化时不会全部自动调整&…...
Java基础-组件及事件处理(中)
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 BorderLayout布局管理器 说明: 示例: FlowLayout布局管理器 说明: …...
UNIX网络编程-TCP套接字编程(实战)
概述 TCP客户端/服务器程序示例是执行如下步骤的一个回射服务器: 客户端从标准输入读入一行文本,并写给服务器。服务器从网络输入读入这行文本,并回射给客户端。客户端从网络输入读入这行回射文本,并显示在标准输出上。 TCP服务器…...
python编写一个自动清理三个月以前的邮件脚本
以下是一个使用 Python 编写的自动清理三个月以前的邮件的脚本。这个脚本适用于连接支持 IMAP 协议的邮箱服务,例如 Gmail。请注意,在执行此操作时,您需要提供电子邮件账号和应用程序专用密码(建议不要使用普通密码,并…...
C++组合复用中,委托的含义与作用
委托(Delegation)的含义与作用 委托是一种软件设计技术,它允许一个对象在处理某个请求时,将请求的处理责任转移给另一个对象。委托的核心思想是通过组合(composition)而不是继承(inheritance&a…...
做网站自己买服务器/网络运营培训班
乱入几个: 1.h5的一个语义化标签 figure :用于规定独立的流内容(图像 图表 照片 代码等) figcapition:与figure配套使用,用于标签定义figure元素标题 2.媒体查询: 通过不同的媒体类型和条件定义样式规则 &…...
做网站起什么名字比较好/seo排名系统源码
英文原文:14 lessons after five years of professional programming 1. 当性能遇到问题时,如果能在应用层进行计算和处理,那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于 My…...
菏泽做网站建设找哪家好/seo研究中心论坛
__filename变量获取当前模块文件的带有完整绝对路径的文件名;【包含文件名本身的绝对路径】 __dirname变量获得当前文件所在目录的完整目录名。【不包含文件名本身的绝对路径】 该方法用于获取一个路径中的目录名,使用方式如下:path.dirname(…...
网站颜色背景代码/seo推广培训课程
环境:windows server 2008 标准版windows live messenger 2009 登录失败,提示如下: 多次尝试未果,重新安装windows live messenger 2009也未能奏效。后来google知,微软提供了一个土法子,每次启动前清理缓存…...
淄博亿泰网站建设推广/产品宣传方案
字符串去除前后空格 void trim(string &s){if(!s.empty() ){s.erase(0, s.find_first_not_of(" "));s.erase(s.find_last_not_of(" ") 1);} }对map和set进行排序 可以将元素项转换为vector的元素,然后排序后输出 #include <iostream> #inclu…...
东圃手机网站开发/南京网站推广公司
Layout File Name:文件名后面不用写".xml"。 Root Tag :默认是线性布局,可以改成其他布局。 接下来编写XML文件 orientation属性 线性布局里的orientation是一个很重要的属性,表示控件的排列方向。该属性存在两个值,vertical&a…...