s60v22cmdas.cpp

来自「symbian平台进程间通信代码」· C++ 代码 · 共 91 行

CPP
91
字号
#include <e32base.h>
#include <flogger.h>

#include "FetchMsgAO.h"


_LIT(KPROCESSNAME, "s60v22cmdas*");  // 线程名称


static RFileLogger sg_logger;
TBool HasProcessRun()
{
    // 寻找符合条件的线程
    TInt pcount = 0;
    TFullName processName;
    TFindProcess findProcess(KPROCESSNAME);
    while ( findProcess.Next(processName) == KErrNone )
    {
        sg_logger.WriteFormat(_L("processName = %S"), &processName);
        pcount++;
    }

    sg_logger.WriteFormat(_L("pcount = %d"), pcount);
    if ( pcount > 1 )
    {
        return ETrue;
    }
    return EFalse;
}


void loggerCleanupFunc(TAny* data)
{
    RFileLogger* sg_logger = (RFileLogger*)data;
    sg_logger->CloseLog(); 
    sg_logger->Close();
}


void mainloop()
{
    CActiveScheduler* scheduler = new(ELeave) CActiveScheduler();
    CleanupStack::PushL(scheduler);
    CActiveScheduler::Install(scheduler);

    sg_logger.Write(_L("new CFetchMsgAO"));
    CFetchMsgAO* fetchMsgAO = CFetchMsgAO::NewLC();
    fetchMsgAO->StartL(&sg_logger);

    sg_logger.Write(_L("CActiveScheduler::Start"));
    CActiveScheduler::Start();

    sg_logger.Write(_L("CActiveScheduler has Stoped"));
    CleanupStack::PopAndDestroy(2, scheduler);
}


void mainEntry()
{
    sg_logger.Connect();
    //通过TCleanupItem确保 sg_logger 可被释放
    CleanupStack::PushL(TCleanupItem(loggerCleanupFunc, &sg_logger));
    
    sg_logger.SetDateAndTime(EFalse, ETrue);
    sg_logger.CreateLog(_L("quxy"), _L("s60v22cmdas.log"), EFileLoggingModeOverwrite);
    sg_logger.Write(_L("==================s60v22cmdas start=========================="));

    if ( !HasProcessRun() )
    {
    	mainloop();
    }
    
    sg_logger.Write(_L("==================s60v22cmdas quit=========================="));
    CleanupStack::PopAndDestroy();  //sg_logger
}


_LIT(KTextConsoleTitle, "s60v22cmdas");
GLDEF_C TInt E32Main()
{
	__UHEAP_MARK;
	CTrapCleanup* cleanup = CTrapCleanup::New(); // get clean-up stack
	TRAPD(error, mainEntry());
	__ASSERT_ALWAYS(!error, User::Panic(KPROCESSNAME, error));
	delete cleanup; // destroy clean-up stack
	__UHEAP_MARKEND;
	
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?