假设M个生产者和N个消费者共享一个具有K(K大于1)个缓冲区的循环缓冲结构BUFFER(提示:可以用一个循环队列或一个整型数组来表示),并设置两个指针IN和OUT,其中IN指向生产者线程当前可用的空缓冲区的在BUFFER中的下标,OUT指向消费者线程当前可用的满缓冲区在BUFFER中的下标。
生产者线程和消费者线程并发执行,当无空缓冲区时,生产者线程阻塞;
当无满缓冲区时消费者线程阻塞,并且多个生产者线程对IN的使用必须互斥,多个消费者线程对OUT的使用也必须互斥
2024/10/18 17:47:39 5KB 生产者消费者
1
在网上找的texturepacker破解版只破解了TexturePackerGUI.exe文件,手动操作没问题。
但是用命令行的话还是有授权警告信息,合图中部分图片会变红和增加"pleasegetalicensefromwww.texturepacker.com"文字提示。
于是自己破解了TexturePacker.exe文件,解决上述命令行问题。
压缩包里面包含了原安装文件和2个破解文件。
正常安装后将破解的exe文件改名替换掉官方文件即可。
2024/10/18 12:02:54 20.96MB TP 破解
1
此套Axure组件库适用于Axure6.0及Axure6.5,一共200个组件,涵盖Axure所有按钮、状态条、提示栏、对话框
2024/10/18 2:28:31 2.57MB Axure Android组件 Axure部件库
1
将vc6的工程转换为高版本会提示缺少这个文件
2024/10/17 10:19:47 1.43MB mfc42d.lib
1
讲述Labview操作AgilentGPIB的条件及需要安装的软件
2024/10/17 8:35:09 721KB NI Labview GPIB
1
1.安装插件导出DAE模型解压后将插件COLLADAMaxNew.dle文件存放于3dsMAX2014安装目录下的plugins文件夹,本示例地址为:“C:\ProgramFiles\Autodesk\3dsMax2014\plugins”。
重启3dsMAX,打开原始三维模型,选择“导出|Export”,选择文件存放路径、输入文件名称,保存类型选择“OpenCOLLADA(*.DAE)“格式。
点击“保存”,弹出“OpenCOLLADAExport”对话框,勾选”copyImages”,点击OK。
导出DAE模型操作完成后,DAE格式的模型将存放于目标路径下,其中还包括了一个“images”的文件夹,此文件夹存放着模型的纹理图片。
2.DAE模型转GLTF双击运行解压文件中的转换工具DaeToGltf.exe。
选择dae文件和选择输出文件位置。
点击开始转换按钮。
等待弹出转换完成提示框,完成。
2024/10/15 3:27:35 44.41MB max插件 DAE导出 DAE转gltf gltf模型
1
No.4简单的MFC多对话框演示程序“MultiDialog”演示如何在工程中拥有多个对话框,及如何在一个对话框中调用另一个对话框。
重点:1、多个对话框类的建立;
2、对话框的模式(Modal)调用方法;
3、Spin控件的使用。
新建一个基于对话框的MFC工程,通过菜单"Insert>>Resource"打开添加资源对话框,在其中选择Dialog后点击New创建一个新的对话框按Ctrl+W打开ClassWizard,系统会提示刚才创建了一个新的对话框资源,是否建立对应的类,选择建立,然后在NewClass窗口中ClassName栏输入它的名称:CSubClass1,确定后系统会自动生成SubClass1.h和SubClass1.cpp并加入工程中,其中有已经创建好的CSubClass1的类的基本代码。
把这个对话框的Caption属性改为“难度选择”,在它上面画三个Radio“简单”、“标准”、“困难”,并建立相关联的变量m_Option1。
(要注意的是在ClassWizard中注意ClassName中应该选CSubClass1而不是之前的主对话框类)按照相同方法建立第二个新对话框,类名“CSubClass2”,Caption为“关卡选择”。
在上面画一个Edit和一个Spin,注意先画Edit后画Spin,将Spin的Autobuddy和Setbuddyinteger勾上。
按Ctrl+W打开ClassWizard,为Edit建立关联变量,不过注意是int型而不是CString型,也为Spin建立关联变量m_Spin1,注意这次是Control型变量CSpinButtonCtrl。
下面为这两个对话框添加代码。
双击“难度选择”对话框的OK按钮,建立对话框的OnOK映射。
在其中加入(在CDialog::OnOK();之前):UpdateData(TRUE);if((m_Option1>2)||(m_Option1<0)){MessageBox("错误的选择!","提示",MB_OK);return;}下面对“关卡选择”对话框添加初始化代码,由于关卡的有效值只有1到6,因此需要在初始化时设置Spin控件的有效值范围。
按Ctrl+W打开ClassWizard,在左侧列表选择这个对话框类CSubDialog2,在右侧列表中选择WM_INITDIALOG,点击右边的“AddFunction...”按钮,接着点击右边的“EditCode”按钮,在其中中加入(在CDialog::OnInitDialog()那句之后,在returnTRUE那句之前):m_Spin1.SetRange(1,6);m_Text1=1;m_Spin1.SetPos(1);其中CSpinButtonCtrl::SetRange()函数的作用是设置和他关联的Spin控件的范围,两个参数分别是下界和上界。
而CSpinButtonCtrl::SetPos()是设定Spin的当前位置。
两个新的对话框都已建立完毕,下来是如何在主对话框中使用的问题。
首先,两个新对话框都有各自的类,分别在SubDialog1.h和SubDialog2.h中有定义。
(类的细节则在对应的cpp中定义)因此,主对话框想要调用这两个新对话框,需要先包含这两个头文件,在你要使用的地方(本例是MultiDialogDlg.cpp中)文件前面加上#include"SubDialog1.h"#include"SubDialog2.h"然后在想要调用的地方就可以使用了。
本例中,首先为主窗口的两个Edit建立CString型关联变量m_Text1和m_Text2,然后在两个按钮的消息映射函数中分别加入:CSubDialog1dialog1;//定义CSubDialog1型对话框的一个新对象dialog1.DoModal();//使用“模式”调用,显示对话框m_Text1.Format("%d",dialog1.m_Option1);//此句在上面对话框没有关闭前不会执行到UpdateData(FALSE);和CSubDialog2dialog1;dialog1.DoModal();m_Text2.Format("%d",dialog1.m_Text1);UpdateData(FALSE);其中第一句均为定义对话框新实例的语句,定义一个你想要的类型的对话框。
第二句是通过调用CDialog::DoModal()方法,来显示这个对话框,并进入“模式”(Modal)状态在“模式”状态,当子对话框没有关闭之前,调用它的父对话框不能被响应,并且其语句执行会停留在刚才的DoModal语句上等待,直到子对话框关闭才接着执行下一个语句。
第三第四句将子对话框得到的数据(即类的成员变量)显示在父对话框的Edit上。
四句执行完后退出该函数,这时刚才定义的CSubDialog1等对话框类变量被销毁,因此创建的话框也被销毁。
2024/10/14 12:21:15 3.52MB MFC VC 多窗口 multiwidows
1
广联达无驱写锁2019-09-24写锁可以改锁号,防盗版提示,在9.22的基础上可以改写锁号。
读复位信息是读你原来的锁号的信息,读出来在写锁时在复位信息下复制粘贴,写锁。
文档中已有四个读出来的复位信息,供大家参考使用。
非无驱锁严禁使用,会废锁!
2024/10/13 15:51:17 1.55MB 无驱写锁 9.24 改锁号 防盗版提示
1
《C和指针》提供与C语言编程相关的全面资源和深入讨论。
《C和指针》通过对指针的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去。
全书共18章,覆盖了数据、语句、操作符和表达式、指针、函数、数组、字符串、结构和联合等几乎所有重要的C编程话题。
书中给出了很多编程技巧和提示,每章后面有针对性很强的练习,附录部分则给出了部分练习的解答。
第1章 快速上手1.1 简介1.1.1 空白和注释1.1.2 预处理指令1.1.3 main函数1.1.4 read_column_numbers函数1.1.5 rearrange函数1.2 补充说明1.3 编译1.4 总结第2章 基本概念2.1 环境2.1.1 翻译2.1.2 执行2.2 词法规则2.2.1 字符2.2.2 注释2.2.3 自由形式的源代码2.2.4 标识符2.2.5 程序的形式2.3 程序风格2.4 总结第3章 数据3.1 基本数据类型3.1.1 整型家族3.1.2 浮点类型3.1.3 指针3.2 基本声明3.2.1 初始化3.2.2 声明简单数组3.2.3 声明指针3.2.4 隐式声明3.3 typedef3.4 常量3.5 作用域3.5.1 代码块作用域3.5.2 文件作用域3.5.3 原型作用域3.5.4 函数作用域3.6 链接属性3.7 存储类型3.8 static关键字3.9 作用域、存储类型示例3.10 总结第4章 语句4.1 空语句4.2 表达式语句4.3 代码块4.4 if语句4.5 while语句4.5.1 break和continue语句4.5.2 while语句的执行过程4.6 for语句4.7 do语句4.8 switch语句4.8.1 switch中的break语句4.8.2 default子句4.8.3 switch语句的执行过程4.9 goto语句4.10 总结第5章 操作符和表达式5.1 操作符5.1.1 算术操作符5.1.2 移位操作符5.1.3 位操作符5.1.4 赋值5.1.5 单目操作符5.1.6 关系操作符5.1.7 逻辑操作符5.1.8 条件操作符5.1.9 逗号操作符5.1.10 下标引用、函数调用和结构成员5.2 布尔值5.3 左值和右值5.4 表达式求值5.4.1 隐式类型转换5.4.2 算术转换5.4.3 操作符的属性5.4.4 优先级和求值的顺序5.5 总结第6章 指针6.1 内存和地址6.2 值和类型6.3 指针变量的内容6.4 间接访问操作符6.5 未初始化和非法的指针6.6 NULL指针6.7 指针、间接访问和左值6.8 指针、间接访问和变量6.9 指针常量6.10 指针的指针6.11 指针表达式6.12 实例6.13 指针运算6.13.1 算术运算6.13.2 关系运算6.14 总结第7章 函数7.1 函数定义7.2 函数声明7.2.1 原型7.2.2 函数的缺省认定7.3 函数的参数7.4 ADT和黑盒7.5 递归7.5.1 追踪递归函数7.5.2 递归与迭代7.6 可变参数列表7.6.1 stdarg宏7.6.2 可变参数的限制7.7 总结第8章 数组8.1 一维数组8.1.1 数组名8.1.2 下标引用8.1.3 指针与下标8.1.4 指针的效率8.1.5 数组和指针8.1.6 作为函数参数的数组名8.1.7 声明数组参数8.1.8 初始化8.1.9 不完整的初始化8.1.10 自动计算数组长度8.1.11 字符数组的初始化8.2 多维数组8.2.1 存储顺序8.2.2 数组名8.2.3 下标8.2.4 指向数组的指针8.2.5 作为函数参数的多维数组8.2.6 初始化8.2.7 数组长度自动计算8.3 指针数组8.4 总结第9章 字符串、字符和字节9.1 字符串基础9.2 字符串长度9.3 不受限制的字符串函数9.3.1 复制字符串9.3.2 连接字符串9.3.3 函数的返回值9.3.4 字符串比较9.4 长度受限的字符串函数9.5 字符串查找基础9.5.1 查找一个字符9.5.2 查找任何几个字符9.5.3 查找一个子串9.6 高级字符串查找9.6.1 查找一个字符串前缀9.6.2 查找标记9.7 错误信息9.8 字符操作9.8.1 字符分类9.8.2 字符转换9.9 内存操作9.10 总结第10章 结构和联合10.1 结构基础知识10.1.1 结构声明10.1.2 结构成
2024/10/13 3:32:42 29.13MB c和指针 pdf 下载 编程
1
sqlserver2000安装时提示挂起解决办法
2024/10/12 18:41:45 1.51MB sqlserver
1
共 1000 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡