⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadaoappui.cpp

📁 symbian平台上多任务处理机制:多线程和Active
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CThreadAOAppUi from ThreadAOAppUi.h
*  Part of  : ThreadAO
*  Created  : 12.1.2005 by Forum Nokia
*  Version  : 1.0
*  Copyright: Nokia Corporation
* ============================================================================
*/

// INCLUDES
#include <avkon.hrh>
#include <aknnotewrappers.h> 
#include <ThreadAO.rsg>		// R_SET_REFRESH_TIME_DIALOG
#include <ThreadAO_loc.rsg> 
#include "ThreadAO.pan"
#include "ThreadAOAppUi.h"
#include "ThreadAO.hrh"
#include "threadAOengine.h"
#include "DevicelistContainer.h"
#include "SharedIntermediator.h"
#include "BluetoothRefreshTimer.h"

#include "ListboxRefreshTimer.h"

// ----------------------------------------------------------------------------
// CThreadAOAppUi::ConstructL()
//
// Standard Symbian OS 2nd phase constructor. 
// ----------------------------------------------------------------------------
void CThreadAOAppUi::ConstructL()
    {
    BaseConstructL( CAknAppUi::EAknEnableSkin );

	// Create listbox container
    iContainer = CDeviceListContainer::NewL(ClientRect());
    iContainer->SetMopParent(this);

	// Add view to control stack
	AddToStackL(iContainer);
	iSMediator = CSharedIntermediator::NewL(iContainer);

	// Doesn't take ownership
	iContainer->SetSMediator(iSMediator);

	// Listbox refresh timer. Needed because calling HandleItemAdditionL
	// from thread1 doesn't seem to work.  
	iTimer = CListboxRefreshTimer::NewL( iContainer );

	// Start refreshing the the listbox.
	iTimer->StartL();

	// Create thread engine which creates thread1.
	iThreadEngine = CThreadAOEngine::NewL(iSMediator);

	}

// ----------------------------------------------------------------------------
// CThreadAOAppUi::CThreadAOAppUi()  
//
// Constructor.
// ----------------------------------------------------------------------------
CThreadAOAppUi::CThreadAOAppUi() : iThreadStarted(EFalse)                          
    {
    }

// ----------------------------------------------------------------------------
// CThreadAOAppUi::~CThreadAOAppUi()
//
// Destructor.
// ----------------------------------------------------------------------------
CThreadAOAppUi::~CThreadAOAppUi()
    {
	delete iThreadEngine;

    if ( iContainer )
        {
        iEikonEnv->RemoveFromStack(iContainer);
        delete iContainer;
        }
	
	delete iTimer;

	delete iSMediator;
	}

// ----------------------------------------------------------------------------
// CThreadAOAppUi::HandleCommandL(TInt aCommand)
//
// Takes care of command handling.
// ----------------------------------------------------------------------------
void CThreadAOAppUi::HandleCommandL(TInt aCommand)
    {
    switch(aCommand)
        {
        case EEikCmdExit:
        case EAknSoftkeyExit:
			{
			if (iThreadStarted)
				{
				// CThreadListener is responsible for exiting the program.
				// The object is created in ThreadEngine CreateThreadsL().
				// This is done because thread1 needs to cleanup before killing
				// the thread.
				iThreadEngine->Stop();
				}
			else 
				{
				Exit();
				}
			}
            break;

		case EThreadStartCommand:
            {
			// start thread1 ( bluetooth discovery )
		    if (!iThreadStarted)
				{
				iThreadEngine->Start();
				iThreadStarted = ETrue;
				}
            }
            break;
		
		case EThreadSetRefreshTimeCommand:
            {
			// Query a new refresh time and set the new value.
			if ( iThreadStarted )
				{
				TInt newRefreshTime = 0;
			    CAknNumberQueryDialog* dlg = new (ELeave) 
			   CAknNumberQueryDialog(newRefreshTime, CAknQueryDialog::ENoTone);
				if ( dlg->ExecuteLD( R_SET_REFRESH_TIME_DIALOG ) )
					{
					iSMediator->BTRefreshTimerPtr()->SetRefreshTime(
					                                          newRefreshTime );
					}
				}
			else 
				// If threadOne hasn't been started, query a new refresh time
				// and set refresh timer's initial value.
				{
				TInt newRefreshTime = 0;
			    CAknNumberQueryDialog* dlg = new (ELeave) 
			   CAknNumberQueryDialog(newRefreshTime, CAknQueryDialog::ENoTone);
				if (dlg->ExecuteLD(R_SET_REFRESH_TIME_DIALOG))
					{
					iSMediator->SetRefreshTimerInitlVal( newRefreshTime );
					}
				}
            }
            break;

        default:
            Panic(EThreadUi);
            break;
        }
    }



⌨️ 快捷键说明

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