>source

c++에서 물건을 시뮬레이트하기 위해 실제로 프로그램을 수행하고 있지만, 나는 큰 문제가 있습니다. 오류 : 정적 어설 션 실패 : std :: 스레드 인수는 rvalues ​​| 로 변환 후에 호출 할 수 있어야합니다.

실제로 많은 연구를했지만 아무 것도 나오지 않았으며 나는 무엇을 해야할지 모르겠다. 내 오차는 STD :: 스레드 appliwaitthd (applimsgwait ())를위한 것이다. 누가 수업이 아니며 어떻게 작동하는지 모릅니다. ApplimsgWait은 조치가있는 잠시 루프입니다.

여기 code가 있습니다

#include "../Include/classglConfigCtx.h"
#include "../Include/SupSrv.h"
#include "../Include/ClassRadMgr.h"
#include "../Include/globalDefine.h"
#include "../Include/structGesCan.h"
#include "../Include/AppliMsg.h"
#include "../Include/AppliSNMP.h"
#include "../Include/GesCanSlot.h"
#include "../Include/GesCanSrv.h"
int main (){
SupSrv SupSrvFile("V0", "SupSrV.txt" );
ConfigClass ConfigCtx;
RadMgr RadioManager;
AppliMsgInit();
role InitRole ;
InitRole= ConfigCtx.ConfigClassGetrole_();
if (InitRole==masterRole)
    {
        GesCanSrvInit();
        GesCanSlotInit();
    };
std::thread RadMgrThd(&
RadMgr::RadMgrWaitEvt,&
RadioManager);
std::thread AppliWaitThd(AppliMsgWait());
std::thread AppliSNMPWaitThd(AppliSNMPWait());
if(InitRole==masterRole)
{
std::thread GesCanSrvThd(GesCanSrvRecvMsg());
std::thread GesCanSlotThd(GesCanSlotPeriod());
};
RadMgrThd.join();
AppliWaitThd.join();
AppliSNMPWaitThd.join();
//GesCanSrvThd.join();
//GesCanSlotThd.join();
return 0;
};

여기에 내 기능이 있습니다

int AppliMsgWait(){
while(1)
{
//vérification des données du contexte de config?
    if(ConfigCtx.ConfigClassGetFlagChangeAddr_()==true) {
        auto newNetCastAddr= ConfigCtx.ConfigClassGetnetCastAddr_();
        auto newNeighCastAddr= ConfigCtx.ConfigClassGetneighCastAddr_();
        serverAddress.sin_addr.s_addr= inet_addr(newNeighCastAddr.c_str());
        ConfigCtx.ConfigClassSetFlagChangeAddr_(false);
    }
    else if(glCSMAMsgToSCOMLst.size()>0) {
        AppliMsgSendSCOM();
    }
    else {
        AppliMsgRecvSCOM();
    }
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
}//While
return 1 ;
}//end func

std :: 스레드 appliwaitthd (applimsgwait); std :: 스레드 appliwaitthd (applimsgwait ()) 대신에, 다른 모든 유사한 std :: 스레드 인스턴스화,

JulianH2021-05-06 01:13:14

괄호를 사용하면 메소드를 실행하고 리턴 값을 전달할 수 있습니다. 메소드 포인터 자체를 전달하고 싶어하므로 메소드를 호출하지 마십시오.

J...2021-05-06 01:13:14

@ @j ... 감사합니다 !! 동일한 방법으로 무효 기능이있는 경우 작동 할 것입니다.

user158324412021-05-06 01:13:14

@ user15832441 당신은 어떤 것을 통과 할 수 있습니다. 문서가 너무 많은 질문에 답합니다 ...

J...2021-05-06 01:13:14

code에서 최소한의 재현 가능한 예제를 추출하고 귀하의 질문의 일부로 제공하십시오. 여기에 새로운 사용자로서 투어를 취하고 물어 보는 방법을 읽으십시오.

Ulrich Eckhardt2021-05-06 01:13:14
  • 이전 MongoDB의 "00:10:00"을 단일 정수로 변환하고 싶습니다.
  • 다음 python : 문자열에서 설정을 복구하려면 어떻게합니까?