Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

Java Swing 垂直流布局管理器实现

Java Swing 垂直流布局管理器实现

最近写一个java UI,需要用到垂直流布局管理器,要求该管理器能够实现内部组件的宽度自适应。看了swing提供的5个布局管理器,尝试的实现效果都不理想,看来只能自己搞一个了,好在网上已有实现,其测试效果如下图:图一 垂直流布局管理器实现效果具体代码如下:清单一:importjava.awt.Component;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.FlowLayo...
最轻量级的C协程库:Protothreads

最轻量级的C协程库:Protothreads

协程的好处不用再多说,作为与函数调用/返回相对的概念,它使我们思考问题的方式经历一场变革。现在我们关注的是C,由于C本身的特质,将协程引入其中将会是一 个挑战。无数先驱已经为这个目标抛了头颅洒了热血,于是我们有了libtask之类。而这里提到的,是一个堪称最轻量级的协程实现:Protothreads(主页:http://www.sics.se/~adam/pt/)。所谓最轻量级,就是说,功能已经不能再精简了,几乎就是原语级别的。——确实,这种最简带来了一些...
Android Handler Message多线程实例

Android Handler Message多线程实例

什么是Handlerhandler通俗讲就是在各个进程之间发送数据的处理对象。在任何进程中,只要获得了另一个进程的handler则可以通过 handler.sendMessage(message)方法向那个进程发送数据。基于这个机制,我们在处理多线程的时候可以新建一个thread,这 个thread拥有UI线程中的一个handler。当thread处理完一些耗时的操作后通过传递过来的handler向UI线程发送数据,由UI线程去更新界面。Handler类简...
如何使用Java synchronized进行线程同步

如何使用Java synchronized进行线程同步

这篇文章从网上找到的,作者是谁不详,因为到处都是转帖。看了之后,解开了我对synchronized的一些疑问,同时也验证了我之前的理解是正确的,记录下来。在java编程思想中对synchronized的一点解释:1、synchronized关键字的作用域有二种: 1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访...
C语言中通过函数指针实现函数重载

C语言中通过函数指针实现函数重载

我们都知道重载是c++面向对象的特性。c语言中是不存在的。所谓重载简单来说就是一个函数名可以实现不同的功能,要么输入参数不同或者参数个数不同,要么返回类型不同。例如函数add(),在c++中可以轻易实现int,double等不同类型参数的相加功能,而在c语言中却不能这样实现。c语言中实现重载功能,或者准确来说是类似重载的功能,可以通过函数指针的方式来实现。下面为演示代码:typedef struct _int_param { int param1; int...
正则表达式30分钟入门教程

正则表达式30分钟入门教程

正则表达式30分钟入门教程目录本文目标 如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 网上的资源及本文参考文献 更新纪录本文目标30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。如何使用本教程最重要的是——请给我30分钟,如果你...
C语言中变长数组引发的思考

C语言中变长数组引发的思考

看到老师写的一个结构体很好奇,结构体的最后是一个长度为0的数组,当时感觉老师是不是写错了,这样写意义何在呢?都没有分配空间,貌似没有存在的意义。后来网上查了一下,其实这是在很多高级的东东里面都用到的东西,linux kernel, MFC, openoffice, 估计更多的地方都用到了。先说说我的理解:struct example{ __u16 tag_type; __u16 tag_len; char tag_data[0];} __attribute...
Python的Set和List的性能比较 + 两者之间的转换

Python的Set和List的性能比较 + 两者之间的转换

在Twitter上看到日本友人@IanMLewis的一条推,测试了下python中Set和List的性能差距,真是不测不知道一测吓一跳,差距能有数百倍 –!他的原文地址在这里:Pythonのセットがすごい。翻译成中文如下:本来是知道在Python中使用Set是比较高效,但是没想到竟然有这么大的差距:~$ python -m timeit -n 1000 "[x for x in range(1000) if x in range(500, 1500)]" ...
Linux 设备驱动轮询编程

Linux 设备驱动轮询编程

Linux系统下网络模型数select最为常用,当然,select只是检测文件系统数据状态,并不只局限于网络编程,select的功能需要底层驱动提供支持,其中核心应用即为等待队列,其他模型,如poll和epoll,对驱动来说并无区别,驱动只是返回数据状态而已。驱动支持select,需要实现file_operations结构中的poll函数指针,其实现也非常简单,只是poll_wait函数的调用,原型如下:unsigned int (*poll) (stru...
Linux 内核等待队列解析

Linux 内核等待队列解析

在阅读Tun驱动时看到,有一些类似 add_wait_queue 的函数,这些函数正是执行等待队列的相关操作,要说等待队列还得从内核进程调度说起,内核调度系统内进程,分配时间片,但是有些进程如从网卡中读数据,在网卡有数据到达之前进程处于阻塞状态,如果此时给相应进程分配时间片做调度,无疑是浪费系统资源,所以系统内每个进程都有自己的状态标志 task->state,这些状态定义于文件 include/linux/sched.h#define TASK_R...
Linux字符设备驱动框架详解

Linux字符设备驱动框架详解

所谓驱动程序,本质上讲是硬件接口,因为操作系统不可能实现每种硬件的接口,所以只对厂商提供接口,只要厂商实现这些接口,就可被操作系统调用,Linux系统驱动程序分为字符设备驱动和块设备驱动,所谓字符设备驱动就是例如键盘驱动,只能顺次读取数据,块设备驱动入硬盘等,可以随机分块读取。而有些程序虽然符合驱动程序规范,但却不真正驱动硬件,而是对操作系统功能的扩充,也称作内核模块。所以驱动程序和内核模块本质上讲属于同一种类别。操作系统对字符设备驱动提供 file_op...
Linux 内核调试1-UML

Linux 内核调试1-UML

最近看了些Linux内核源码,之前认为最好的调试内核源码最好的方式使用Qemu虚拟机,结合GDB调试,虽然在网上也看到一些这种调试方式的弊端,但感觉虚拟机支持调试是最完美的事情,虽然Bochs更为灵活甚至内置调试器,但速度太慢。之前一直觉得KGDB这种双机调试的方式很不完美,还必须使用一个调试机,不过在Windows下使用WinDbg调试虚拟机多了,感觉这种方式很合理,起 码被调试机当机的情况下,调试机还是活的。而且这样看上去很酷,而且比SoftICE这样...
Linux 内核调试2-UML调试内核

Linux 内核调试2-UML调试内核

今天的特别汗,首先,之前UML在64位系统下没有编译通过,编译器和内核源码都应该不会犯这样低级的错误,那最有可能的原因就是gcc版本和 linux内核版本不匹配,gcc 4.4.4版本算是高版本了,而内核版本2.6.34已非最新,抱着侥幸心里下载了2.6.36版本编译,居然顺利通过,看来64位与32位编译并没什么 区别。另外一个问题是昨天启动UML失败的问题,原来是我的命令行写错了,ubda指定根文件系统,我错写成了udba,以至无法加载文件系统,经过纠正...
Linux 内核调试3-UML网络配置

Linux 内核调试3-UML网络配置

UML支持多种方式的网络,一般使用tap/tun模拟UML虚拟机中的eth0驱动,仅仅这种方式也能分为桥接和NAT等等,手工配置网络也有助于理解网络的运行方式。根据官方文档 Simple UML Networking 下载 uml_utilities ,其实也就使用了一个工具 tunctl,这个工具很简单,就是启动 tun 驱动,首先得先查看是否加载 tun 驱动,当然首先需要有root权限:# 查看用户 ID (tunctl 使用)[cpp@dark t...
Linux 内核调试4-Qemu调试Linux内核

Linux 内核调试4-Qemu调试Linux内核

通过UML可以方便的在本机调试Linux内核,UML是一种特殊的虚拟机,另外一种更为灵活的虚拟机是Qemu,Qemu是一种完全仿真虚拟机, 可以在i386平台仿真任意其他处理器构架,而且支持GDB调试,这里尝试一下使用Qemu调试Linux内核,Qemu参数-kernel可以直接指定 内核启动,这与UML有相似之处。首先需要编译安装Qemu,这里并没有什么疑惑之处,直接从官方网站下载源码,使用Linux最常用的编译命令即可:# 默认选项会编译所有处理器构架...
<< 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 >>