能力值:
( LV9,RANK:290 )
|
-
-
2 楼
看不明白!
我帮你顶起!
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
不知道解决办法,不过说一个原因可能相关或相同的问题,看对LZ是否有启发
定时循环调用CreateThread创建线程(线程函数几分钟后会中指),当创建一定数量线程之后,会创建失败,原因记得好像是“内存不足”,后来改用线程池来复用线程解决了此问题。
据此,个人认为线程中止时类似于HANDLE之类的线程相关的资源并未被完全释放(或许WINDOWS也有内存泄漏?不得而知)。
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
if ( (hardErrorRetCode >= STATUS_SUCCESS)
&& (ResponseYes == hardErrorResponse) )
{
return STATUS_DLL_INIT_FAILED;
}
}
//
// 如果DLL的入口点函数返回0(表示失败),通知用户
//
if ( 0 == initRetValue )
{
DWORD hardErrorParam2;
DWORD hardErrorResponse2;
hardErrorParam2 = pModuleLoaderInfo->FullDllPath;
_NtRaiseHardError( STATUS_DLL_INIT_FAILED,
1, // 参数个数
1, // UnicodeStringParametersMask
&hardErrorParam2,
OptionOk, // 只能以“确定”作为响应
&hardErrorResponse2 );
if ( _LdrpInLdrInit )
_LdrpFatalHardErrorCount++;
return STATUS_DLL_INIT_FAILED;
}
}
}
建议把代码发出来看看。
|
能力值:
(RANK:570 )
|
-
-
5 楼
我遇到的问题是多进程环境。据说Exitprocess之后会将该进程的所有HANDLE和申请分配的内存都释放完毕,事实是不是这样就不知道了。。。
你说的问题与我的很相似。。。假如你的问题是普遍存在的,那么我即使使用类似的解决方案,不让进程终止,而是让进程继续别的任务,那么最终还是会出现你的问题。。。我建立的进程是MS的,该进程使用多线程工作,线程完成自己工作之后便会自己退出。。。
|
能力值:
(RANK:570 )
|
-
-
6 楼
|
能力值:
(RANK:1010 )
|
-
-
7 楼
提供一种测试方法:先运行,直到有一个线程出错时,强制暂停所有线程,用内存整理工具整理下,然后再跑,看其他线程会不会出错
|
能力值:
(RANK:570 )
|
-
-
8 楼
据说是因为建立了新进程之后,把没返回的HANDLE释放造成的句柄泄露。。。
如果是这样,那么CREATETHREAD之后是不是也应该把返回的HTHREAD释放掉?
|
能力值:
(RANK:170 )
|
-
-
9 楼
都要closehandle的,核心编程上有,
你线程需要同步吗,有没有共享方面的问题
而且还没有搞清你到底是createprocess还是createthread:)是每createprocess后,该process在10次createtread吗
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
现在不是什么CloseHandle的问题
我原来那个程序,资源都是预先分配好的,自己管理的。运行的时候用性能监视器记录,连续N个小时根本没有变化,结果到创建线程数目到某一临界值,内存曲线就会变化,一样出问题
同样的问题不只是创建线程,WININET接口好像也有类似的问题。你自己创建再关闭接口试试,次数到达某一数量级之后,将直接导致程序崩溃退出,全局的异常处理捕捉不到错误
|
能力值:
(RANK:570 )
|
-
-
11 楼
我是用10个线程建立10个进程,等待进程退出,然后再次建立进程。程序运行期,我的10个线程都是不会终止的。
我建立的进程是系统自带的,通过钩子取得目标进程里面我感兴趣的内容。
|
能力值:
(RANK:570 )
|
-
-
12 楼
可能我的问题跟你的问题不一样吧,修改以后暂时还没有长时间跑过。因为其他问题,程序的主要功能代码要作比较大的改动。。。。
|
能力值:
( LV15,RANK:500 )
|
-
-
13 楼
desktopheap看看sta0吧, 系统总的句柄数是有限的, 暴增就是泄了
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
谢谢楼上指点
不过能否进一步指点下CLOSEHADNLE为什么还会出现错误?除了自己对已有HANDLE进行复用,还有什么方法解决?
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
把程序连续运行试试,估计还有问题哈
服务器上的东西,稳定性比较麻烦
|
能力值:
(RANK:210 )
|
-
-
16 楼
CreateProcess以后要关闭子进程的主线程句柄,然后等子进程结束以后再关闭子进程的句柄.
|
能力值:
( LV8,RANK:130 )
|
-
-
17 楼
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"USERProcessHandleQuota"
|
能力值:
( LV12,RANK:210 )
|
-
-
18 楼
应该是桌面堆被耗完了。
http://blogs.msdn.com/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx
|
能力值:
(RANK:1060 )
|
-
-
19 楼
是不是CreateProcess
DEBUG PROCESS?
是的话要关闭hThread和hProcess
|
能力值:
( LV4,RANK:50 )
|
-
-
20 楼
第一当你CloseHandle(线程句柄);后系统别不会立即回收你的将要kill的线程。
同理ExitProcess也应该如此,那么也就是说在你的进程结束后而你的线程的资源并没有立即释放,而你又立即开启了10个如此反复10万次系统资源可能就被耗尽。
我能想到的如此
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
可能是资源或内存泄漏引起的,可以用Rational Purify之类的软件测试一下。
|
|
|