|
本帖最后由 萧阳天 于 2014-8-5 22:24 编辑
声明下 环境: 本人学习E4个月了,时间不长,在校期间有C基础。但根据判断,可以断定为是BUG
软件环境:WINXP,加载官方全支持库,加载ET助手支持库最新,加载常量支持库1.6版
调试环境:虚拟机WINXP,纯净环境(无其它冲突程序软件),E5300 CPU 分配1G内存
开发的软件大概作用,取屏幕点色,判断进行程序报警,运用于长期运行环境(挂机类型)
源码BUG结构: 时钟→启动线程→子程序→执行屏幕取点色(采用API方式)
PS 内存泄漏:程序运行过程中,申请的内存,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏(来在百度百科)。该部分内存 根据其它资料意思为:无任何指针 指向,导致系统无法控制该区域内存,直至程序自身结束,才得到释放(有错误希望指明)。
上源码:
.版本 2
.支持库 EThread
.支持库 OPenGL
.支持库 spec
.程序集 窗口程序集1
.程序集变量 取线程句柄, 整数型
.子程序 __启动窗口_创建完毕
时钟1.时钟周期 = 100
.子程序 _时钟1_周期事件
启动线程 (&子程序1, , 取线程句柄)
' 子程序1 () 解决方案,不采用启动线程。至于用多线程模块,一没找到,二是感觉模块原理应该是一样的。所以未采用模块方式运行多线程
.子程序 子程序1
.局部变量 a, 整数型
.局部变量 b, 整数型
.局部变量 m, 整数型
.计次循环首 (10, )
a = GetDesktopWindow ()
b = GetWindowDC (a) ' 此段也可用 a=getdc(0)
m = GetPixel (b, 500, 100) ' 此段也可用 m = GetPixel (a, 500, 100)
a = 释放设备句柄 (a, b) ' 此段也可用 ReleaseDC (0, a)
调试输出 (a) ' 说明释放内存成功了,但运用启动线程的方法依然存在内存泄漏
.计次循环尾 ()
强制结束线程 (取线程句柄) ' 在此说明下,线程自已运行完会自动结束,其实没必要强制结束(线程死循环除外),其它资料对此有争议,本人做了测试。结果是自动释放
大大们, 希望测试我的源码,看下你的任务管理器,程序内存是在一直增加哟,一直加加加加,我想运行一天,你的电脑内存配置不高会报错的~~ 方案已经找到不用启动线程,直接等待子程序运行完。希望我发现的没有错,是个问题,希望更新版本时改进,如何有错,希望大大能指明。
http://bbs.125.la/thread-13725657-1-1.html 这是另一个无用贴,为了提高结贴率,大大们管理员帮忙关了吧~
|
-
|