Windows下比较完美线程池的升级版本
Windows下比较完美线程池的升级版,加入了我对线程池能想到的几乎所有功能,而且更改了第一版本的一些Bug,并进行了效率的优化。
第一版的介绍地址:http://blog.csdn.net/fishjam/article/details/8632049
功能列表如下:
1.能自动根据任务和线程的多少在 最小/最大 线程个数之间调整(Vista后的系统有 SetThreadpoolThreadMaximum 等函数有类似功能),现已支持动态改变最小、最大值。
2.可以设置等待Job的最大个数,并在加入Job时,队列满了的话,可以设置等待超时并根据返回值进一步处理
3.能方便的对任一任务进行取消,如任务尚未运行则由框架代码处理,如任务已经运行,则需要 JobBase 的子类根据 GetJobWaitType 的返回值进行处理
4.能对单个Job或整个线程池进行 暂停、继续、停止 处理 -- 需要 JobBase 的子类根据 GetJobWaitType 的返回值进行处理
5.支持回调方式的反馈通知( Progress/Error 等)
6.使用模版方式实现,能方便的进行参数传递
7.在加入任务时可以设置优先级,现已支持动态调整优先级
8.使用的是微软的基本API,能支持WinXP、Vista、Win7等各种操作系统(CreateThreadpoolWork 等只能在Vista后才能使用)
9.可以有多个实例,方便进行控制(QueueUserWorkItem 等是单实例)
10.采用的是对称模式的线程池(没有管理线程),运行成本低
Windows下比较完美线程池的升级版
Windows下比较完美线程池的升级版,加入了我对线程池能想到的几乎所有功能,而且更改了第一版本的一些Bug,并进行了效率的优化。
功能列表如下:
1.能自动根据任务和线程的多少在 最小/最大 线程个数之间调整(Vista后的系统有 SetThreadpoolThreadMaximum 等函数有类似功能),现已支持动态改变最小、最大值。
2.能方便的对任一任务进行取消,如任务尚未运行则由框架代码处理,如任务已经运行,则需要 JobBase 的子类根据 GetJobWaitType 的返回值进行处理
3.能对单个Job或整个线程池进行 暂停、继续、停止 处理 -- 需要 JobBase 的子类根据 GetJobWaitType 的返回值进行处理
4.支持回调方式的反馈通知( Progress/Error 等)
5.使用模版方式实现,能方便的进行参数传递
6.在加入任务时可以设置优先级,现已支持动态调整优先级
7.使用的是微软的基本API,能支持WinXP、Vista、Win7等各种操作系统(CreateThreadpoolWork 等只能在Vista后才能使用)
8.可以有多个实例,方便进行控制(QueueUserWorkItem 等是单实例)
9.采用的是对称模式的线程池(没有管理线程),运行成本低
使用SWT+WinBuilder制作的JavaDemo程序
通过学习研究,发现参照 Eclipse 自带的 ControlExample SWT 示例程序,并结合 WinBuilder可以很好的进行可视化开发出完全满足我要求的JavaDemo程序,方便演示效果和进行扩展,特共享出来。
一个可以重用的线程安全生产者消费者队列类
生产者、消费者队列的代码和文档和例子,CSDN或别的网站上已经有很多了,我就不再多说了。不过一般的文档中给出的例子往往只是“例子”,要用于实际的项目开发中差的很远,共享一下我以前写的一个线程安全的生产者消费者队列类。具有如下特点:
1.可以设置队列中的最大长度;
2.线程安全;
3.多线程想向队列中放入数据时,可设置等待队列有空位的超时时间,当有空位时,等待线程会被唤醒并将数据加入队列。函数原型为:FTLThreadWaitType Append(const ELEMENT& element, DWORD dwTimeOut).
4.多线程从队列中取出数据时,可设置等待队列有数据的超时时间, 当有数据时等待线程会被唤醒。函数原型为:FTLThreadWaitType Remove(ELEMENT& element, DWORD dwTimeOut),
5.支持安全的退出,即如果在等待加入数据或取出数据时,能直接通过Stop唤醒。
6.支持动态改变队列大小 -- 但这个功能我测试的不是很多,可能有Bug,如发现有Bug请告诉我。
7.和我其他FTL中的类一样,支持模版。
本次就偷一下懒,只上传源码和UT代码,就不再写示例程序了。下载了源码以后需要自己对应更改一下(如果实在更改不来,可以给我回复信息,我有空时再写个Demo放上来)。
博客地址:http://blog.csdn.net/fishjam/article/details/8832145
使用线程池实现的Http上传下载实现
福利贴:
前段时间发布了《Windows下一个比较完美的线程池实现和示例》(http://download.csdn.net/detail/fishjam/5106672),根据下载量和评论来看,对大家还比较有用。
现在发布一个利用该线程池实现的Http上传下载实现,不过这几个类写的比较粗糙,比如:
1.还有很多问题没有考虑或提供解决方案(本地磁盘已有同名下载文件的处理,理论上应该通过回调由用户选择处理);
2.也有很多我想加的东西(比如 身份验证、多线程下载同一个文件等)都没有加进去,
希望大家多多包含。另外如果大家发现有什么问题或好的建议,请及时告知。我。
PS:更改了我在博客中所说的,当以 Start(0, N) 启动线程池,可能造成 Wait 超时的Bug.
Windows下一个比较完美的线程池实现和示例
Windows下一个比较完美的线程池实现和示例
本线程池提供了如下功能:
1.能根据任务个数和当前线程的多少在最小/最大线程个数之间自动调整(Vista后的系统有 SetThreadpoolThreadMaximum 等函数有类似功能);
2.能方便的对任一任务进行取消操作,无论该任务是等待运行状态还是正在运行状态都支持(相比较而言,WaitForThreadpoolWorkCallbacks 函数只能取消尚未运行的任务);
3.能对整个线程池进行安全的暂停、继续、停止处理
4.支持回调方式的反馈通知
5.使用模版方式实现,能方便的进行参数传递
6.在加入任务时可以设置优先级(目前尚不支持动态调整)
7.使用的是微软的基本API,能支持WinXP、Vista、Win7等各种操作系统(CreateThreadpoolWork 等只能在Vista后才能使用)
详细说明参见本人博客
Debug Info Filter(二进制,非源码)
具体内容参见blog
DirectShow中用于调试的一个Inpladce Transform Filter,具有如下功能:
a.当不起用其“Dump”功能时,对原始的Graph没有影响,但推荐只在调试时使用;
b.能列出并动态更改前后连接的Filter采用的MediaType(参见示例1);
c.能将流过其中的指定数据按照结构化存储的方式Dump到指定文件中,方便分析(参见示例2),个人感觉比微软Sample中的Dump好用多了;
d.能查看当前Graph中的各个Filter的详细信息,比如名字、MediaType、Allocator、支持的接口等(参见示例3)。这个可是好东西哦,当在使用一个Filter时,至少通过其提供的接口,猜到怎么用,及应该去查什么资料了。
C++实现的可以安全的暂停、继续、停止线程的线程类和Sample
在使用线程时,最麻烦的就是线程的同步控制,如暂停、继续、停止(包括暂停状态下)等。虽然微软提供了 SuspendThread、TerminateThread 等函数“似乎”可以完成这个功能,但如果你在代码里使用这些函数,则往往会遇到各种问题(比如SuspendThread时正好在CRT分配内存的锁中造成其他线程也跟着锁死,TerminateThread时资源未释放)等。
本人经过试验和总结,整理出可以安全的进行暂停、继续、停止线程执行的一个线程类,能非常方便的对线程进行控制。
附件里是源码和Sample程序,并有详细的使用说明。
COM学习笔记和测试程序2
之前在 http://download.csdn.net/detail/fishjam/4174884 共享了我学习COM的时做的测试程序和笔记,
结果有人下载以后说”包里只有程序而没有笔记“ 而且”不能运行“。
我在相关的博客文章中(http://blog.csdn.net/fishjam/article/details/7400954)也写的非常清楚,”采用一个COM知识分类一个★头文件★的方法,将各种COM知识的学习笔记记录在其中“,莫非没有doc文件就不叫笔记了? 何况还抓了图。。。
因为我没有找到修改上传文件的地方,因此采用0资源分的方式重新上传,让大家自由下载并评测是否真的没有价值。
补充说明:
1.因为csdn不能重复上传相同的文件,因此我将压缩文件的名字改了,不过内容仍然是以前那个;
2.编译环境是 VS2008 + SP1 , 没有装SP1的话我不知道会出现什么问题,如果有问题可以及时和我沟通并更改。
COM学习笔记和测试程序
针对COM学习中记下的各种笔记和测试代码,方便学习各种COM知识。
检测COM接口信息的源码和例子
通过简单的宏获取一个接口能提供的信息,比如能QueryInterface的接口,能通过QueryService提供的服务,容器希望接口提供的服务等。
比如,代码为:
COM_VERIFY(spShellBrower.CoCreateInstance(CLSID_ShellDesktop)); //定义并创建 ShellDesktop 的实例
COM_DETECT_INTERFACE_FROM_REGISTER(spShellBrower);
输出为:
f:\mywork\comdetectdemo\comdetectdemodlg.cpp(105) : Begin Detect Interface spShellBrower( 0x00162A00 ) From Register
1 : IUnknown
2 : IStorage
3 : IPersist
4 : IShellIcon
5 : IShellFolder
6 : IPersistFolder
7 : IPersistFolder2
8 : IItemNameLimits
9 : IShellFolder2
10 : IOleCommandTarget
11 : IObjectWithSite
Total Check 10637 Interfaces
spShellBrower's Interfaces Count are at least 11
可知 CLSID_ShellDesktop 至少提供了 11 个接口。
更多信息参见文档:
http://blog.csdn.net/fishjam/article/details/7365322
程序化的设计模式学习源码
将设计模式的学习信息采用程序的方式进行显示.
详细信息参见:http://blog.csdn.net/fishjam/article/details/3740114
将设计模式的学习信息用C#程序展现
将23个设计模式的学习信息用C#程序展现,可以通过列表方式查看任何一个设计模式的详细信息,并能随时修改运行示例代码。具体信息参见
http://blog.csdn.net/fishjam/archive/2009/01/09/3740114.aspx