View
229
Download
3
Category
Preview:
Citation preview
Symbian C++ vs
.NET Compact Framework C#
Leonardo Kunz
Sumário Introdução (Symbian OS)
Características História
Symbian C++ vs .NET Compact C# Convenções Exceções Objetos ativos Threads Sincronização
Conclusões
Symbian OS - Introdução
Características PrincipaisSO para dispositivos móveis e PDAsDesenvolvido para arquitetura ARMÊnfase na economia de recursosSuporte para aplicações de tempo realMultitarefas e proteção de memóriaEquipa maioria dos smartphones atuaisVárias plataformas (S60, UIQ, MOAP)
Symbian OS - Introdução
HistóriaEricsson, Nokia, Motorola e Psion fundaram a
Symbian Ltd. em 1998Baseado no EPOC da PsionSymbian Ltd. desenvolve SO base e licencia
para fabricantesEm 24 de junho de 2008, anuncia compra da
Symbian e criação da Symbian Foundation
Symbian OS - Introdução
Symbian FoundationUnificar plataformas SymbianTornar plataforma open-sourceParceiros: Nokia, Sony Ericsson, Motorola,
NTT DoCoMo, AT&T, LG Electronics, Samsung Electronics, STMicroelectronics, Texas Instruments e Vodafone
Symbian OS - Introdução
Linguagens suportadasSymbian C/C++JavaMEFlashLitePerlPythonRubyLua
Symbian C++
Baseada em C++ Otimizada para dispositivos móveis com
recursos limitados Principais características
CleanupStack Trap/Leave Modelo cliente/servidor – chamadas assíncronas Objetos ativos
Symbian C++ - Convenções
Conveção de Nomes - baseada na funcionalidade das classesClasses TClasses CClasses RClasses M
Symbian C++ - Convenções
Classes Tipo T Normalmente alocadas na pilhaDesalocadas quando função de chamada
retornar
Symbian C++ - Convenções
Classes Tipo CAlocadas em heapSempre derivam da classe CBaseOperador newManipuladas por ponteiro
Symbian C++ - Convenções
Classes Tipo RHandles para recursos mantidos em outro
lugar
Symbian C++ - Convenções
Classes Tipo MDefinem classes abstratas Implementação em classes derivadas
.NET Compact Framework
Baseado no .NET Desenvolvimento para Windows CE C# ou Visual Basic
Symbian C++ - Exceções
Try / Catch do C++ não suportado em versões anteriores à versão 9.0
Mecanismo Leave / Trap é semelhanteMenor overheadMétodos com Leave devem terminar em L
Symbian C++ - Exceçõesint InsertL(){//... other codes ...if (!myObject) User::Leave(KErrNoMemory);//... more codes...}
TInt errcode;TRAP(errcode, InsertL());if (errcode == KErrNoMemory){ // threats exceptions throwed by "InsertL()" }
Symbian C++ - Exceções
Sinalização de erros fatais – Panic User::Panic(). Resulta na finalização da thread
.NET Compact C# - Exceções
Try / Catch / Finally Idêntico à .NET Mais legível do que mecanismo de
exceções (Trap / Leave) do Symbian
Symbian C++ - Objetos Ativos
Modelo baseado em eventos Objetos Ativos fazem chamadas
assíncronas e se preemptam Escalonador Ativo aciona execução Menor overhead do que threads Sincronização não é necessária
Symbian C++ - Objetos Ativos
Symbian C++ - Threads
Classe RThread provê funcionalidade das threads
Criadas através da instanciação da classe RThread e do método create()
Método resume() inicia execução Estados: running, ready, waiting, e suspended Método kill() finaliza thread
Symbian C++ - Threads
RThread thread; thread.Create(KThreadName, threadFunction, 4096,
KMinHeapSize, 256*KMinHeapSize, &iParameter); thread.Resume();
Criando uma thread:
.NET Compact C# - Threads Semelhante ao Symbian Desenvolvedor deve controlar finalização
das threads - comando abort()
Thread myThread = new Thread(new ThreadStart(MyThread)); myThread.Start();
Symbian C++ - Sincronização
SemáforosWait() e Signal()Classe RSemaphoreLocais ou globais
MutexWait() e Signal()Classe RMutexLocais ou globais
Symbian C++ - Sincronização
Seções críticasRegião do código em que apenas uma thread
pode entrar por vezClasse RCriticalSectionWait() e Signal() IsBlocked()
1: class CMessageBuffer2: {3: public:4: CMessageBuffer();5: void AddMessage(const TDes &aMsg);6: void GetMessages(TDes &aMsgs);7:8: public:9: RMutex iMutex;10: TDes iMsgs;11: };12:13: CMessageBuffer::CMessageBuffer()14: {15: iMutex.CreateLocal();16: }17:18: void CMessageBuffer::AddMessage(const TDes &aMsg)19: {20: iMutex.Wait();21: iMsgs.Append(aMsg);22: iMutex.Signal();23: }
Symbian C++ - Sincronização
25: void CMessageBuffer::GetMessages(TDes &aMsgs)26: {27: iMutex.Wait();28: aMsg.Copy(iMsgs);29: iMsgs.Zero();30: iMutex.Signal();31: }32:33: static void CMyClass::threadFunction(TAny *aPtr)34: {35: CMessageBuffer *msgBuffer = (CMessageBuffer *)TAny;36: TInt count = 0;37: TBuf<40> msg;38: 39: while (TRUE)40: {41: msg.Format(“ID: %d, count: %d\n”, RThread().Id(), count++);42: msgBuffer->AddMessage(msg);43: User::After(1000 * 1000);44: }45: }
Symbian C++ - Sincronização
.NET Compact C# - Sincronização Mutex
Mutex.WaitOne Mutex.Release
Monitores Monitor.Enter(this); Monitor.Exit(this);
Interlocked Interlocked.Increment(ref counter); Interlocked.Decrement(ref counter);
Conclusões
Múltiplas plataformas dificultam a portabilidade de código
Documentação das APIs é pouco detalhada
Não possui monitores Programação com modelos não usuais
(Ex. Trap/Leave e Objetos Ativos)
Bibliografia Symbian OS
- http://en.wikipedia.org/wiki/Symbian_OS Symbian.com
- http://www.symbian.com/ NewLC
- http://www.newlc.com/ Symbian Developer Network
- http://developer.symbian.com/main/index.jsp Forum Nokia
- http://www.forum.nokia.com/ Symbian Tutorial
- http://www.symbiantutorial.org/ .NET Compact Framework Documentation
- http://msdn.microsoft.com/en-us/library/ms950380.aspx
Recommended