[原]ComFriendlyWaitForSingleObject

  1. structThreadParam
  2. {
  3. unsignedint p1;// +00h ebp-24h
  4. unsignedint p2;// +04h ebp-20h
  5. unsignedint cookie;// +08h ebp-1Ch
  6. LPSTREAM xxx;// +0Ch ebp-18h
  7. HANDLE hEvent;// +14h ebp-14h
  8. HANDLE hXXX;// +18h ebp-10h
  9. unsignedint xxx;// +1Ch ebp-0Ch
  10. }
 
c++代码
  1. HRESULT ComFriendlyWaitForSingleObject(LPUNKOWN p1, HANDLE* pThread)
  2. {
  3. HANDLE hh1;
  4. HANDLE hh2;
  5. HRESULT hr = S_OK;
  6. hr =HrCreateEvent(0, TRUE,0,0,&hh2);
  7. if( FAILED(hr))
  8. return hr;
  9. hr =HrCreateEvent(0, TRUE,0,0,&hh1);
  10. if( FAILED(hr))
  11. return hr;
  12. ThreadParam param;
  13. param.p1 = p1;
  14. param.p2 = pThread;
  15. param.hr = S_OK;
  16. param.pStream = NULL;
  17. param.hEvent = hh2;
  18. param.hXXX = hh1;
  19. param.xxx =0;
  20. HANDLE hThread =CreateThread(0,0,&ComFriendlyWaitMtaThreadProc,&param,0, NULL);
  21. WaitForSingleObject(hh2, INFINITE);
  22. if( SUCCEED(param.hr))
  23. {
  24. hr =CoGetInterfaceAndReleaseStream(param.pStream, GUID_6d5140c1_7436_11ce_8034_00aa006009fa,&p1);
  25. param.pStream = NULL;
  26. if( NULL != p1 )
  27. {
  28. p1->vtable[4](&p1);
  29. p1->Release();
  30. }
  31. SetEvent(hh1);
  32. WaitForSingleObject(*pThread, INFINITE);
  33. }
  34. AutoCleanupInfo(&hh1);
  35. AutoCleanupInfo(&hh2);
  36. AutoCleanupInfo(pThread);
  37. }
 
 
 
汇编码
  1. uf uiautomationcore!ComFriendlyWaitForSingleObject
  2. uiautomationcore!ComFriendlyWaitForSingleObject:
  3. 7303f4e98bff mov edi,edi
  4. 7303f4eb55 push ebp
  5. 7303f4ec8bec mov ebp,esp
  6. 7303f4ee83ec24 sub esp,24h
  7. 7303f4f153 push ebx
  8. 7303f4f256 push esi
  9. 7303f4f357 push edi
  10. 7303f4f433f6 xor esi,esi
  11. 7303f4f68d45f8 lea eax,[ebp-8]
  12. 7303f4f950 push eax
  13. 7303f4fa56 push esi
  14. 7303f4fb56 push esi
  15. 7303f4fc6a01 push 1
  16. 7303f4fe56 push esi
  17. 7303f4ff8975f8 mov dword ptr [ebp-8],esi
  18. 7303f502 e894fcffff call uiautomationcore!HrCreateEvent(7303f19b)
  19. 7303f5073bc6 cmp eax,esi
  20. 7303f5090f8c49950000 jl uiautomationcore!ComFriendlyWaitForSingleObject+0x22(73048a58)Branch
  21. uiautomationcore!ComFriendlyWaitForSingleObject+0x36:
  22. 7303f50f8d45fc lea eax,[ebp-4]
  23. 7303f51250 push eax
  24. 7303f51356 push esi
  25. 7303f51456 push esi
  26. 7303f5156a01 push 1
  27. 7303f51756 push esi
  28. 7303f5188975fc mov dword ptr [ebp-4],esi
  29. 7303f51b e87bfcffff call uiautomationcore!HrCreateEvent(7303f19b)
  30. 7303f5208bd8 mov ebx,eax
  31. 7303f5223bde cmp ebx,esi
  32. 7303f5240f8ca7000000 jl uiautomationcore!ComFriendlyWaitForSingleObject+0x4d(7303f5d1)Branch
  33. uiautomationcore!ComFriendlyWaitForSingleObject+0x58:
  34. 7303f52a8b4508 mov eax,dword ptr [ebp+8]
  35. 7303f52d8b7df8 mov edi,dword ptr [ebp-8]
  36. 7303f5308945dc mov dword ptr [ebp-24h],eax
  37. 7303f5338b450c mov eax,dword ptr [ebp+0Ch]
  38. 7303f53656 push esi
  39. 7303f5378945e0 mov dword ptr [ebp-20h],eax
  40. 7303f53a8b45fc mov eax,dword ptr [ebp-4]
  41. 7303f53d56 push esi
  42. 7303f53e8945f0 mov dword ptr [ebp-10h],eax
  43. 7303f5418d45dc lea eax,[ebp-24h]
  44. 7303f54450 push eax
  45. 7303f54568f1f50373 push offset uiautomationcore!ComFriendlyWaitMtaThreadProc(7303f5f1)
  46. 7303f54a56 push esi
  47. 7303f54b56 push esi
  48. 7303f54c8975e4 mov dword ptr [ebp-1Ch],esi
  49. 7303f54f8975e8 mov dword ptr [ebp-18h],esi
  50. 7303f552897dec mov dword ptr [ebp-14h],edi
  51. 7303f555 ff1514120373 call dword ptr [uiautomationcore!_imp__CreateThread (73031214)]
  52. 7303f55b89450c mov dword ptr [ebp+0Ch],eax
  53. 7303f55e3bc6 cmp eax,esi
  54. 7303f5600f84f9940000 je uiautomationcore!ComFriendlyWaitForSingleObject+0x90(73048a5f)Branch
  55. uiautomationcore!ComFriendlyWaitForSingleObject+0xac:
  56. 7303f5666aff push 0FFFFFFFFh
  57. 7303f56857 push edi
  58. 7303f5698b3d28120373 mov edi,dword ptr [uiautomationcore!_imp__WaitForSingleObject (73031228)]
  59. 7303f56f ffd7 call edi
  60. 7303f5718b5de4 mov ebx,dword ptr [ebp-1Ch]
  61. 7303f5743bde cmp ebx,esi
  62. 7303f5767c40 jl uiautomationcore!ComFriendlyWaitForSingleObject+0xfe(7303f5b8)Branch
  63. uiautomationcore!ComFriendlyWaitForSingleObject+0xbe:
  64. 7303f5788d4508 lea eax,[ebp+8]
  65. 7303f57b50 push eax
  66. 7303f57c68e4230373 push offset uiautomationcore!_GUID_6d5140c1_7436_11ce_8034_00aa006009fa (730323e4)
  67. 7303f581 ff75e8 push dword ptr [ebp-18h]
  68. 7303f584897508 mov dword ptr [ebp+8],esi
  69. 7303f587 ff1514130373 call dword ptr [uiautomationcore!_imp__CoGetInterfaceAndReleaseStream (73031314)]
  70. 7303f58d8b4d08 mov ecx,dword ptr [ebp+8]
  71. 7303f5908bd8 mov ebx,eax
  72. 7303f5928975e8 mov dword ptr [ebp-18h],esi
  73. 7303f5953bce cmp ecx,esi
  74. 7303f597741f je uiautomationcore!ComFriendlyWaitForSingleObject+0xfe(7303f5b8)Branch
  75. uiautomationcore!ComFriendlyWaitForSingleObject+0xdf:
  76. 7303f5998d45f4 lea eax,[ebp-0Ch]
  77. 7303f59c50 push eax
  78. 7303f59d b87c2e0373 mov eax,offset uiautomationcore!_GUID_00000000_0000_0000_c000_000000000046 (73032e7c)
  79. 7303f5a250 push eax
  80. 7303f5a350 push eax
  81. 7303f5a48975f4 mov dword ptr [ebp-0Ch],esi
  82. 7303f5a78b11 mov edx,dword ptr [ecx]
  83. 7303f5a951 push ecx
  84. 7303f5aa ff520c call dword ptr [edx+0Ch]
  85. 7303f5ad8bd8 mov ebx,eax
  86. 7303f5af8b4508 mov eax,dword ptr [ebp+8]
  87. 7303f5b28b08 mov ecx,dword ptr [eax]
  88. 7303f5b450 push eax
  89. 7303f5b5 ff5108 call dword ptr [ecx+8]
  90. uiautomationcore!ComFriendlyWaitForSingleObject+0xfe:
  91. 7303f5b8 ff75fc push dword ptr [ebp-4]
  92. 7303f5bb ff152c120373 call dword ptr [uiautomationcore!_imp__SetEvent (7303122c)]
  93. 7303f5c16aff push 0FFFFFFFFh
  94. 7303f5c3 ff750c push dword ptr [ebp+0Ch]
  95. 7303f5c6 ffd7 call edi
  96. 7303f5c88d450c lea eax,[ebp+0Ch]
  97. 7303f5cb50 push eax
  98. 7303f5cc e8e8f0ffff call uiautomationcore!AutoCleanupInfo<void*>::SafeRelease(7303e6b9)
  99. uiautomationcore!ComFriendlyWaitForSingleObject+0x4d:
  100. 7303f5d18d45fc lea eax,[ebp-4]
  101. 7303f5d450 push eax
  102. 7303f5d5 e8dff0ffff call uiautomationcore!AutoCleanupInfo<void*>::SafeRelease(7303e6b9)
  103. uiautomationcore!ComFriendlyWaitForSingleObject+0x24:
  104. 7303f5da8d45f8 lea eax,[ebp-8]
  105. 7303f5dd50 push eax
  106. 7303f5de e8d6f0ffff call uiautomationcore!AutoCleanupInfo<void*>::SafeRelease(7303e6b9)
  107. 7303f5e35f pop edi
  108. 7303f5e45e pop esi
  109. 7303f5e58bc3 mov eax,ebx
  110. 7303f5e75b pop ebx
  111. 7303f5e8 c9 leave
  112. 7303f5e9 c20800 ret 8
  113. uiautomationcore!ComFriendlyWaitForSingleObject+0x22:
  114. 73048a588bd8 mov ebx,eax
  115. 73048a5a e97b6bffff jmp uiautomationcore!ComFriendlyWaitForSingleObject+0x24(7303f5da)Branch
  116. uiautomationcore!ComFriendlyWaitForSingleObject+0x90:
  117. 73048a5f8d450c lea eax,[ebp+0Ch]
  118. 73048a6250 push eax
  119. 73048a63 e8515cffff call uiautomationcore!AutoCleanupInfo<void*>::SafeRelease(7303e6b9)
  120. 73048a688d45fc lea eax,[ebp-4]
  121. 73048a6b50 push eax
  122. 73048a6c e8485cffff call uiautomationcore!AutoCleanupInfo<void*>::SafeRelease(7303e6b9)
  123. 73048a71 bb0e000780 mov ebx,8007000Eh
  124. 73048a76 e95f6bffff jmp uiautomationcore!ComFriendlyWaitForSingleObject+0x24(7303f5da)Branch
 
 





MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
基于PhasorDetect手持NIRS设备多光谱反射数据的组织氧饱和度实时监测研究(Matlab代码实现)内容概要:本文围绕基于PhasorDetect手持近红外光谱(NIRS)设备的多光谱反射数据,开展组织氧饱和度(StO2)的实时监测研究,并提供了完整的Matlab代码实现方案。研究聚焦于利用NIRS技术采集生物组织的多光谱反射信号,通过光传输理论模型(如修正的朗伯-比尔定律)反演出组织中氧合血红蛋白与脱氧血红蛋白的浓度,进而实时计算氧饱和度。文中详细阐述了信号预处理、光谱特征提取、参数标定及实时计算算法的设计与实现过程,展示了如何将硬件数据采集与软件算法处理相结合,构建一套完整的实时监测系统。; 适合人群:具备一定信号处理和生物医学工程背景,熟悉Matlab编程,从事近红外光谱技术、生理参数监测或相关领域研究的研发人员和研究生。; 使用场景及目标:① 实现基于手持式NIRS设备的便携式组织氧饱和度实时监测;② 学习和掌握多光谱数据处理、生理参数反演算法的Matlab编程实现;③ 为开发同类医疗监测设备提供算法参考和技术验证型。; 阅读建议:此资源以Matlab代码为核心,紧密结合理论与实践,建议读者在阅读时同步运行和调试提供的代码,重点关注数据预处理流程、光谱分析模型和实时计算逻辑的实现细节,并可根据具体硬件参数进行相应调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值