|
发表于 2024-7-13 20:40:12
|
显示全部楼层
上海市上海市
函数 UI事件 整型 按钮点击_按钮2(元素句柄 来源句柄, 逻辑型* 是否拦截)
句柄型 JB_线程句柄 = 线程._线程启动(空, 1)
如果 (JB_线程句柄 != 0) //线程可能还未执行就被结束,这就有可能导致未成功释放资源,这里你应该先判断现在状态是否空闲的,如果正在工作就不释放
HH_线程关闭句柄(JB_线程句柄)
调试输出("线程外:", (变整型)HH_线程取自线程ID())
返回 0
函数 逻辑型 HH_线程销毁(句柄型 线程句柄)
#嵌入代码
DWORD dwExitCode;
GetExitCodeThread(线程句柄, &dwExitCode);
return TerminateThread(线程句柄, dwExitCode); //TerminateThread函数。这个函数强制终止线程,但是它不会释放线程的句柄。如果使用TerminateThread,你需要确保在线程被终止后调用CloseHandle来关闭句柄。否则也会消耗资源
#嵌入代码_结束
在HH_线程等待函数中,你使用了MsgWaitForMultipleObjects函数,这个函数会等待多个事件对象,包括窗口消息。如果消息队列中有未处理的消息,这可能导致函数无限期地等待,从而影响线程的结束。
在类_多线程的_线程启动函数里,如果线程创建失败,你删除了传递给线程的参数,但没有关闭句柄。要注意在任何线程创建失败的情况下都关闭句柄。
在HH_线程挂起和HH_线程恢复函数中,如果一个线程被多次挂起,它需要被恢复相同次数才能继续执行。如果挂起和恢复的次数不匹配,可能会导致线程无法正常结束。所以这里要加个判断,只让他挂起一次,恢复一次,不让他重复挂起
如果类_多线程中有全局变量或静态成员,它们可能会在程序的生命周期内持续存在,从而导致句柄数增加。
你把这几些都优化一下应该差不多了 |
|