ACE如何融入QT中

ACE如何融入QT中  

         前面提到由于ACE和QT对main都有预定义,他们都是为了简化对入口函数的定义,以及一些基本的初始化。当2则相遇时,必须对其中一个做适当的调整。这里选择了ACE框架做调整,简单的定义一个ACE_DOESNT_DEFINE_MAIN虽然可以避免冲突,但许多ACE的框架无法正常运行。这里选取examples/c++npv2中的WFMO_Reactor_Logging_Server做测试,采用ACE_DOESNT_DEFINE_MAIN后,无法开启TCP监听。

        在OS_main.h中,可以看到根据目标平台,ACE_TMAIN被替换成了相关的初始化函数,比如Win32下,我们写的“主函数”实际上在一个对象的方法中被调用,这个对象的构造和析构分别完成了ACE框架的初试化和结束工作。我们必须去掉关于"main"的预编译指令,修改片段如下:

.......................

#     else /* ! (ACE_WIN32 && ACE_USES_WCHAR) */

ACE_BEGIN_VERSIONED_NAMESPACE_DECL

class ACE_Export ACE_Main_Base
{
public:
  ACE_Main_Base ();
  virtual ~ACE_Main_Base ();
  int run (int, char *[]);
  virtual int run_i (int, char *[]) = 0;
};

ACE_END_VERSIONED_NAMESPACE_DECL

/*
** LabVIEW RT cannot directly use an executable. Need to build the program
** as a DLL and call it from something else. The ACE test framework knows this
** trick and uses a LabVIEW RT target-resident control program to load a
** DLL, look up it's main() entrypoint, and call it.
*/
#       if defined (ACE_BUILD_LABVIEW_EXE_AS_DLL)
extern "C" __declspec (dllexport) int main (int, char *[]);
#       endif /* ACE_BUILD_LABVIEW_EXE_AS_DLL) */

/*#       define main \ */
/*ace_main_i (int, char *[]); \ */
int ace_main_i (int, char *[]); \ 
ACE_BEGIN_VERSIONED_NAMESPACE_DECL \
ACE_Export int ace_os_main_i (ACE_Main_Base&, int, char *[]); \
class ACE_Main : public ACE_Main_Base {int run_i (int, char *[]);}; \
inline int ACE_Main::run_i (int argc, char *argv[])  \
{ \
  return ace_main_i (argc, argv); \
} \
ACE_END_VERSIONED_NAMESPACE_DECL \
/*int \  */
/*ACE_MAIN (int argc, char *argv[]) /* user's entry point, e.g., wmain */ 
/*{ \ */
/*  ACE_Main m; \ */
/*  return m.run (argc, argv); /*ace_os_main_i (m, argc, argv);   what the user calls "main" */ \
/*} \ */
/*int \ */
/*ace_main_i */

#     endif /* ACE_WIN32 && ACE_USES_WCHAR */

................

这样在main中显式执行下面的代码:

  ACE_Main m; 
  return m.run (argc, argv); /*ace_os_main_i (m, argc, argv);   what the user calls "main" */

然后再实现int ace_main_i (int, char *[]);即可 ,如此修改后的WFMO_Reactor_Logging_Server.cpp如下:

............

int ace_main_i (int argc, char *argv[])
{
  const size_t N_THREADS = 4;
  ACE_WFMO_Reactor wfmo_reactor;
  ACE_Reactor reactor (&wfmo_reactor);

  Server_Logging_Daemon *server;
  // Ignore argv[0]...
  --argc; ++argv;
  ACE_NEW_RETURN (server,
                  Server_Logging_Daemon (argc, argv, &reactor),
                  1);
  Quit_Handler quit_handler (&reactor);
  ACE_Thread_Manager::instance ()->spawn_n
    (N_THREADS, event_loop, &reactor);
  return ACE_Thread_Manager::instance ()->wait ();
}

int main(int argc, char *argv[])
{
  ACE_Main m; 
  return m.run (argc, argv); /*ace_os_main_i (m, argc, argv);   what the user calls "main" */ \

}
       重新编译ACE和WFMO_Reactor_Logging_Server后可以正常开启监听。随后我将Linux平台上基于ACE的TCP通信服务程序使用MinGW4.4重新编译,替换ACE_Reactor实现和修改了一些语法问题(Linux环境GCC版本是4.1的,没4.4版的严格)后编译通过,并且能正常运行。MinGW 真是个好东西!




内容概要:本文围绕面向新能源容量提升的含智能软开关(SOP)的配电网重构问题,提出了一种基于二阶锥规划(SOCP)的双层优化模型。该模型上层以提升新能源消纳能力为目标进行网络重构,下层利用SOP灵活调节功率分布,解决重构过程中可能出现的潮流越限问题。通过将非凸的最优潮流问题转化为二阶锥松弛形式,有效提高了求解效率与计算可行性,并在标准算例系统中验证了该方法在降低网损、均衡负荷分布及提升新能源利用率方面的优越性。研究不仅提供了理论建模思路,还配套实现了Matlab代码,便于算法复现与拓展应用。; 适合人群:电力系统、新能源并网、智能配电网及相关领域的科研人员与工程技术人员,具备一定的优化理论基础与Matlab编程能力者优先。; 使用场景及目标:①应用于高渗透率分布式新能源接入背景下的配电网运行优化;②为智能软开关与网络重构的协同控制提供可复现的数学建模与求解方案;③支撑新型电力系统中提升电网灵活性、可靠性和新能源承载力的关键技术研究。; 阅读建议:建议结合提供的Matlab代码深入理解二阶锥松弛技术在电力系统优化中的具体实现,重点关注模型构建、非线性约束的线性化处理以及双层优化架构的分解求解逻辑,可通过调整参数或测试不同场景进一步验证算法鲁棒性与适应性。
内容概要:本文档聚焦于“光伏并网逆变器扫频与稳定性分析”的博士论文关键技术复现,核心内容涵盖阻抗建模与扫频法验证。资源提供了完整的Matlab代码与Simulink仿真模型,系统实现了包含锁相环(PLL)和电流环控制的光伏并网逆变器系统,用于开展序阻抗建模、小信号扫频辨识及弱电网条件下的稳定性分析。文档不仅详细展示了建模与仿真流程,还列举了多个相关科研方向与技术服务内容,凸显其在电力电子、新能源并网系统仿真与理论验证方面的学术价值与实践指导意义。; 适合人群:具备电力电子、自动控制或新能源并网技术背景,从事相关领域科研工作的研究生、博士生及工程技术人员。; 使用场景及目标:①深入学习光伏并网逆变器的阻抗建模方法与小信号扫频仿真技术;②复现并掌握博士论文中的稳定性分析过程,探究锁相环与电流环对系统稳定性的关键影响;③开展弱电网环境下新能源并网系统的宽频带振荡机理与交互稳定性研究,支撑高水平科研项目与论文撰写; 阅读建议:建议结合Simulink仿真模型与Matlab代码同步运行与调试,重点关注扫频激励信号的设计、频响数据的采集处理及阻抗曲线的绘制与分析流程,同时参考文中提及的原始文献,系统构建“理论建模—仿真验证—数据分析—结论提炼”的完整科研闭环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值