RAPI初始化算法和SAMPLE CODE

简介:

RAPI全写为Remote Application Interface, 就是PC端调用这组API, 通过ActiveSync来操作TARGET端WindowsCE作业. 这个功能估计以后在WINCE或WIN MOBILE的应用上会用到许多

我今天修改了同事留下的Updateboot.exe的代码, 改进蓝牙读写的模块. 这个地方我们用到了RAPI, 看一下他们在程序中初始化RAPI的做法

 HRESULT hRapiResult;
 hRapiResult = CeRapiInit();
 if(hRapiResult != S_OK)
 {
     m_ValueEdit.SetWindowText((LPCTSTR)"初始化RAPI失败");
     return;
 }

看起来是平淡无奇, 实际上单步一下就可以发现运行到CeRapiInit()时, 程序就BLOCK在这里了,死活走不下去, 并没有达到 if(hRapiResult != S_OK)的预期目的. 我查了一下CeRapiInit()的说明:

A call to CeRapiInit does not return until the connection is made, an error occurs, or another thread calls CeRapiUninit.

也就是说像我现在并没有把板子和PC相连并启动ACTIVE SYNC时, 这个CeRapiInit()是肯定赖着不走了, 程序会死在这里. (鄙视一下谁写的代码,这个坑好大啊)  因此想到了重新创立个等待进程调用CeRapiUninit来干掉它. 不过这样做显然不厚道, 创立进程需要占用更多的内存. 所以用了上句说明的下半段:

The CeRapiInitEx function does not block the calling thread. Instead, it uses an event to signal when initialization is complete.

建立个事件, 用WaitForSingleObject来等他, 超时就BYEBYE了. 贡献自己写的如下代码, 以后RAPI INIT可以参考

BOOL RapiInitialzation()
{
    RAPIINIT struRapiInit;    // 这个是CeRapiInitEx函数要求的入口参数
    DWORD dwWaitResult = 0;   // 等待初始化完成事件的变量
    HRESULT hRapiResult = NULL;  // CeRapiInitEx的返回HANDLE

     if ( m_bRapiInitFlag == FALSE )  // 全局的一个FLAG,如果初始化过就不再重复了
    {
        struRapiInit.cbSize =  sizeof(RAPIINIT);   // 填满该结构体仅有的三个成员
        struRapiInit.hrRapiInit = NULL;   // 明知是输出参数也顺手填一下, 我以前吃过亏, 惊弓之鸟
        struRapiInit.heRapiInit = NULL;

        hRapiResult = CeRapiInitEx(&struRapiInit);   // 关键点

        m_ValueEdit.SetWindowText((LPCTSTR)"Wait 2 second for RapiInit");  // 后面2秒程序要顿一下了, 得告诉用户.  m_ValutEdit和对话框里一个IDC_STATIC关联了.
        dwWaitResult = WaitForSingleObject(struRapiInit.heRapiInit, 2000);   // 关键点

         if( hRapiResult == S_OK && 
            struRapiInit.hrRapiInit == S_OK &&
            dwWaitResult != WAIT_TIMEOUT)     // 保守起见, 三个返回值都判断
        {
           m_bRapiInitFlag = TRUE;
            return TRUE;
        }
         else
        {
            m_ValueEdit.SetWindowText((LPCTSTR)"The initialization of RAPI falied, you need to install an ActiveSync or connect the IPTV to PC");    // 一般是没连接导致, 当然也可能用户没装ActiveSync
            return FALSE;
        }
    }
     else
    {
         m_bRapiInitFlag = TRUE;
          return TRUE;
    }
}
本文转自Walzer博客园博客,原文链接:http://www.cnblogs.com/walzer/archive/2006/02/05/325605.html,如需转载请自行联系原作者
相关文章
|
7月前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
62 0
|
6月前
|
机器学习/深度学习 数据采集 监控
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
**神经网络与AI学习概览** - 探讨神经网络设计,包括MLP、RNN、CNN,激活函数如ReLU,以及隐藏层设计,强调网络结构与任务匹配。 - 参数初始化与优化涉及Xavier/He初始化,权重和偏置初始化,优化算法如SGD、Adam,针对不同场景选择。 - 学习率调整与正则化,如动态学习率、L1/L2正则化、早停法和Dropout,以改善训练和泛化。
62 0
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
|
存储 NoSQL 算法
Jedis - SharedJedisPool 初始化与应用 & hash 算法详解
使用SharedJedisPool 时注意到内部涉及到 hash 函数,其中对应的 hash 接口需要复写两个 hash 函数分别是 hash (String var1) 和 hash (Byte[] var1),默认使用Hashing.MURMUR_HASH 算法,除此之外也可以使用自带的 MD5,下面针对 SharedJedisPool 以及两个 Hash 函数的使用和含义进行分解。......
233 0
|
12天前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
12天前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
108 68
|
22天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
1月前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
185 80
|
23天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
23天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
21天前
|
移动开发 算法 计算机视觉
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。

热门文章

最新文章