Я думаю, что поток запущен, но проблема в том, что у вас не получается.
Основная проблема заключается в том, что вы пытаетесь создать код пользовательского интерфейса в другом потоке. Как правило, это не сработает, создайте все элементы пользовательского интерфейса в основном потоке. Так что ваш код никогда не будет работать в любом случае.
Также вам необходимо узнать о концепциях Symbian, таких как управление ресурсами там (стек очистки) и активные объекты.
Обычно при запуске потока Symbian необходимо настроить поток со стандартной инфраструктурой Symbian. Почти всегда вам нужно настроить стек очистки в новом потоке, и вам может потребоваться дополнительно установить ActiveScheduler (хотя вам нужен хотя бы один активный объект перед запуском ActiveScheduler).
См. Пример Nokia 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;
}
Если вам нужно использовать активные объекты, вам также нужно настроить ActiveScheduler:
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;
}