到目前为止,我读过的所有文档似乎都表明,在我的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中工作得很好,不出所料。我遗漏了什么?
发布于 2011-11-14 14:09:52
假设您正在使用WindRiver Workbench开发此应用程序,您将需要使用内核配置并启用POSIX包。
这可以通过在内核配置中搜索“pthread”来完成。
发布于 2011-12-22 01:28:35
POSIX支持在VxWorks 6.8中存在,但是大多数POSIX组件不包括在默认配置中。在工作台中,POSIX支持在内核配置的POSIX组件文件夹下启用。
POSIX支持分为许多不同的模块,例如进程调度、时钟(默认情况下包含)、消息队列等。
如果您是在工作台下进行开发,则包括适当的组件(在本例中为INCLUDE_POSIX_THREADS)也将包括pthread所依赖的任何其他组件。如果您在工作台之外配置内核,则需要确保手动包含所有依赖项。
https://stackoverflow.com/questions/7760846
复制相似问题