塞班RThread的问题
Problem with Symbian RThread
我有这样的代码:
void MyAppAppUi::ConstructL()
{
_LIT(KString1, "asd");
TBuf<15> buf1(KString1);
TInt iStackSize = 32000;
RThread iThread;
TInt err = iThread.Create(
buf1,
func,
iStackSize,
NULL,
NULL
);
iThread.Resume();
}
TInt func(TAny *obj)
{
CAknInformationNote* note = new(ELeave)CAknInformationNote;
TBuf<32> msg;
msg.Format(_L(" rasdasd "));
note->ExecuteLD(msg);
}
和头文件中的
friend TInt func(TAny *obj);
问题是它没有进入函数:func
err = KErrNone
我认为线程正在运行,但问题是你正在运行的是失败的
主要问题是你试图在另一个线程中做UI代码。这通常是行不通的,在主线程上创建所有UI。所以你的代码无论如何都不会工作。
你还需要学习Symbian的概念,比如资源管理(清理堆栈)和活动对象。
一般来说,当你启动一个Symbian线程时,你需要用标准的Symbian基础设施来设置线程。你几乎总是需要在新线程上设置一个清理堆栈,你可能需要选择性地设置一个ActiveScheduler(尽管在启动ActiveScheduler之前你至少需要一个活动对象)。
查看这个诺基亚RThread示例,了解如何创建和管理线程。
把这个例子分解一下:
您需要清理堆栈基础结构:
TInt ThreadFunction(TAny* aParams)
{
// 1. Add cleanup stack support.
CTrapCleanup* cleanupStack = CTrapCleanup::New();
// 2. Get pointer to thread host
CMyThread* host = (CMyThread*)aParams;
TRAPD(err,
... your code here ...
);
host->ThreadExecuted(err);
delete cleanupStack;
return KErrNone;
}
如果你需要使用活动对象,你还需要设置activesscheduler:
TInt ThreadFunction(TAny* aParams)
{
// 1. Add cleanup stack support.
CTrapCleanup* cleanupStack = CTrapCleanup::New();
// 2. Get pointer to thread host
CMyThread* host = (CMyThread*)aParams;
TRAPD(err,
// 3. Add support for active objects
CActiveScheduler* activeScheduler = new (ELeave) CActiveScheduler;
CleanupStack::PushL(activeScheduler);
CActiveScheduler::Install(activeScheduler);
// 4. Create and start your active object here
..... you active object goes stuff here
// NOTE: When adding CActiveScheduler support for threads we have to
// add atleast one active object in it or it fails on
// CActiveScheduler::Start().
// CPeriodic is derived from CActive active object so that is good for
// this example.
// 5. --> Thread execution starts
CActiveScheduler::Start();
// 6. --> Thread execution ends (waiting for CActiveScheduler::Stop())
CleanupStack::PopAndDestroy(... your active object here....);
CleanupStack::PopAndDestroy(activeScheduler);
);
host->ThreadExecuted(err);
delete cleanupStack;
return KErrNone;
}
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 塞班RThread的问题