vxWorks pthreads - PullRequest
       22

vxWorks pthreads

2 голосов
/ 14 октября 2011

Вся документация, которую я до сих пор читал, указывает на то, что в моей версии vxWorks (6.8) есть поддержка потоков posix, однако простое тестовое приложение не работает должным образом. Вот источник:

tTest.h

#include <pthread.h>

class tTest
{
    public:
        tTest();
        virtual ~tTest();
    private:
        pthread_t tid;
        static void* Worker(void* args);
};

tTest.cpp

#include <stdio.h>
#include "tTest.h"


tTest::tTest()
{
    printf("Starting up...\n");
    if(pthread_create(&tid, NULL, &tTest::Worker, NULL))
    {
        printf("Failed to create thread.\n");
    }

}

tTest::~tTest()
{
    if(pthread_join(tid,NULL))
    {
        printf("Failed to join thread.\n");
    }
    printf("Shutting down...\n");
}

void* tTest::Worker(void* args)
{
    printf("ThreadID: %d\n", (int)pthread_self());
    return NULL;
}

Точка входа для модуля ядра vxWorks просто:

#include "tTest.h"

int tTest_main()
{
    tTest m;
    return 0;
}

Сообщения о запуске / завершении работы хороши, но рабочий поток - нет. Это работает нормально и, как и ожидалось, в Linux. Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Поддержка POSIX существует в VxWorks 6.8, но большинство компонентов POSIX не включены в конфигурацию по умолчанию.В рабочей среде поддержка POSIX включена в папке POSIX Components конфигурации ядра.

Поддержка POSIX разбита на ряд различных модулей, например, планирование процессов, часы (включены по умолчанию), очереди сообщений и т. Д.

Если вы разрабатываете в рабочей среде, включая соответствующиеКомпонент (в этом случае INCLUDE_POSIX_THREADS) также будет включать в себя любые другие компоненты, от которых зависят pthreads.Если вы конфигурируете ядро ​​за пределами рабочей среды, вам необходимо убедиться, что вы включили все зависимости вручную.

3 голосов
/ 14 ноября 2011

Предполагая, что вы используете WindRiver Workbench для разработки этого приложения, вам нужно будет использовать конфигурацию ядра и включить пакет потоков POSIX.

Это можно сделать, выполнив поиск в конфигурации ядра для 'pthreads'

...