コードをより効率的にするために助けが必要です。コードラインは私が望むことをしますが、うまくいきません。後でデータの量を増やし、関数が遅すぎるため、より効率的にする必要があります。
私も C++ とプログラミングの初心者なので、どんな提案も歓迎されているので、もっと学ぶことができます。
ほとんどの場合、変更はほとんどないため、関数 A で変更された値を関数 B によってさらに送信したいだけです。コードでは、まったく変更されていない場合でも、すべての値がさらに送信されます。これはリソースの浪費であり、適切なプログラミングではありません。
重要!1) IOCP.sendVarData の最初のパラメーターの値は静的であり、変更できません。2) 関数 B の PmdgGetVariable ("MCP_annunFD", &result) がすべてを開始します。これを改善する最善の方法は何でしょうか?
前回の実行時からの変更を検出し、変更を保存する以下の機能があります。
// この関数は、NGX データが変更されたときに呼び出されます void ProcessNGXData (PMDG_NGX_Data *pS) {
if (pS->MCP_Course[0] != NGX_MCP_Course[0]){NGX_MCP_Course[0] = pS->MCP_Course[0];}
if (pS->MCP_Course[1] != NGX_MCP_Course[1]){NGX_MCP_Course[1] = pS->MCP_Course[1];}
if (pS->MCP_IASMach != NGX_MCP_IASMach){NGX_MCP_IASMach = pS->MCP_IASMach;}
if (pS->MCP_Heading != NGX_MCP_Heading){NGX_MCP_Heading = pS->MCP_Heading;}
if (pS->MCP_Altitude != NGX_MCP_Altitude){NGX_MCP_Altitude = pS->MCP_Altitude;}
if (pS->MCP_VertSpeed != NGX_MCP_VertSpeed){NGX_MCP_VertSpeed = pS->MCP_VertSpeed;}
if (pS->MCP_annunLVL_CHG != NGX_MCP_annunLVL_CHG){NGX_MCP_annunLVL_CHG = pS->MCP_annunLVL_CHG;}
if (pS->MCP_annunN1 != NGX_MCP_annunN1) {NGX_MCP_annunN1 = pS->MCP_annunN1;}
if (pS->MCP_annunSPEED != NGX_MCP_annunSPEED) {NGX_MCP_annunSPEED = pS->MCP_annunSPEED;}
if (pS->MCP_annunVNAV != NGX_MCP_annunVNAV) {NGX_MCP_annunVNAV = pS->MCP_annunVNAV;}
if (pS->MCP_annunLVL_CHG != NGX_MCP_annunLVL_CHG){NGX_MCP_annunLVL_CHG = pS->MCP_annunLVL_CHG;}
if (pS->MCP_annunHDG_SEL != NGX_MCP_annunHDG_SEL){NGX_MCP_annunHDG_SEL = pS->MCP_annunHDG_SEL;}
if (pS->MCP_annunLNAV != NGX_MCP_annunLNAV) {NGX_MCP_annunLNAV = pS->MCP_annunLNAV;}
if (pS->MCP_annunVOR_LOC != NGX_MCP_annunVOR_LOC){NGX_MCP_annunVOR_LOC = pS->MCP_annunVOR_LOC ;}
if (pS->MCP_annunAPP != NGX_MCP_annunAPP ) {NGX_MCP_annunAPP = pS->MCP_annunAPP ;}
if (pS->MCP_annunALT_HOLD != NGX_MCP_annunALT_HOLD){NGX_MCP_annunALT_HOLD = pS->MCP_annunALT_HOLD ;}
if (pS->MCP_annunVS != NGX_MCP_annunVS ) {NGX_MCP_annunVS = pS->MCP_annunVS ;}
if (pS->MCP_annunCMD_A != NGX_MCP_annunCMD_A ) {NGX_MCP_annunCMD_A = pS->MCP_annunCMD_A ;}
if (pS->MCP_annunCWS_A != NGX_MCP_annunCWS_A ) {NGX_MCP_annunCWS_A = pS->MCP_annunCWS_A ;}
if (pS->MCP_annunCMD_B != NGX_MCP_annunCMD_B ) {NGX_MCP_annunCMD_B = pS->MCP_annunCMD_B ;}
if (pS->MCP_annunCWS_B != NGX_MCP_annunCWS_B) {NGX_MCP_annunCWS_B = pS->MCP_annunCWS_B ;}
}
別のスレッドでは、この関数を送信するようになりました
static UINT running_as_Thread(LPVOID lpvoid) {
int result;
bool rep= true;
while (rep){
PmdgGetVariable ("MCP_annunFD", &result);
IOCP.sendVarData ( 2534, NGX_MCP_Course [0]);
IOCP.sendVarData ( 2524, NGX_MCP_Altitude);
IOCP.sendVarData ( 2542, NGX_MCP_Heading);
IOCP.sendVarData ( 2559, NGX_MCP_IASMach);
IOCP.sendVarData ( 1140, NGX_MCP_VertSpeed);
IOCP.sendVarData ( 2535, NGX_MCP_Course [1]);
IOCP.sendVarData ( 286, NGX_MCP_annunLVL_CHG);
IOCP.sendVarData ( 1143, NGX_MCP_VertSpeedBlank);
IOCP.sendVarData ( 1115, NGX_MCP_IASBlank);
IOCP.sendVarData ( 1117 , NGX_MCP_IASOverspeedFlash);
IOCP.sendVarData ( 1118, NGX_MCP_IASUnderspeedFlash);
IOCP.sendVarData ( 282, NGX_MCP_annunATArm);
IOCP.sendVarData ( 283, NGX_MCP_annunN1);
IOCP.sendVarData ( 284, NGX_MCP_annunSPEED);
IOCP.sendVarData ( 285, NGX_MCP_annunVNAV);
IOCP.sendVarData ( 286, NGX_MCP_annunLVL_CHG);
IOCP.sendVarData ( 287, NGX_MCP_annunHDG_SEL);
IOCP.sendVarData ( 288, NGX_MCP_annunLNAV);
IOCP.sendVarData ( 289, NGX_MCP_annunVOR_LOC);
IOCP.sendVarData ( 290, NGX_MCP_annunAPP);
IOCP.sendVarData ( 291, NGX_MCP_annunALT_HOLD);
IOCP.sendVarData ( 292, NGX_MCP_annunVS);
IOCP.sendVarData ( 293, NGX_MCP_annunCMD_A);
IOCP.sendVarData ( 294, NGX_MCP_annunCWS_A);
IOCP.sendVarData ( 295, NGX_MCP_annunCMD_B);
IOCP.sendVarData ( 296, NGX_MCP_annunCWS_B);
Sleep (400);
}
return THREAD_EXIT_OK;
}