C++ 如何在类构造函数中初始化pthread\u t变量
如何在类构造函数中初始化pthread\u t变量 C++静态分析(coverity)错误:非静态类成员threadId未在此构造函数或其调用的任何函数中初始化C++ 如何在类构造函数中初始化pthread\u t变量,c++,pthreads,pthread-join,C++,Pthreads,Pthread Join,如何在类构造函数中初始化pthread\u t变量 C++静态分析(coverity)错误:非静态类成员threadId未在此构造函数或其调用的任何函数中初始化 #include <iostream> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <pthread.h> #include <unistd.h> void * thr
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
void *
threadFunc(void * arg)
{
std::cout << "Thread Function :: Start" << std::endl;
// Sleep for 2 seconds
sleep(2);
std::cout << "Thread Function :: End" << std::endl;
return NULL;
}
class threads
{
private:
pthread_t threadId;
int err;
public:
threads():err(0){};
~threads(){};
void create_thread();
void join_thread();
};
void
threads::create_thread()
{
// Create a thread that will function threadFunc()
err = pthread_create(&threadId, NULL, &threadFunc, NULL);
// Check if thread is created sucessfuly
if (err)
{
std::cout << "Thread creation failed : " << strerror(err);
}
else
{
std::cout << "Thread Created with ID : " << threadId << std::endl;
}
}
void
threads::join_thread()
{
err = pthread_join(threadId, NULL);
// check if joining is sucessful
if (err)
{
std::cout << "Failed to join Thread : " << strerror(err) << std::endl;
}
}
int main()
{
threads T;
T.create_thread();
T.join_thread();
std::cout << "Exiting Main" << std::endl;
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
无效*
threadFunc(void*arg)
{
std::cout我已经尝试过这个方法及其效果(发布答案,以帮助他人)
#包括
#包括
#包括
#包括
无效*
threadFunc(void*arg)
{
std::cout首先,如果您有c++11或更高版本,简短的答案是..您没有。您使用std::thread
。确保这一点,请将threadId()
添加到您的成员初始值设定项列表中(首先,维护与您的成员decl顺序相匹配的顺序)现在我有了旧的C++编译器,现在不能使用C++ 11。@ WooCurig我同意使用STD::Trand的建议,但是有些时候原始的、旧的StOOL C API的PHTRAID的特征不能从STD::线程中得到。一些特性可以通过使用本地句柄来实现,但不是全部。当然,我。如果不使用std::thread,可移植性可能是一个问题。
#include <iostream>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
void *
threadFunc(void * arg)
{
std::cout << "Thread Function :: Start" << std::endl;
// Sleep for 2 seconds
sleep(2);
std::cout << "Thread Function :: End" << std::endl;
return NULL;
}
class threads
{
private:
pthread_t threadId;
int err;
public:
threads():err(0){ threadId = pthread_t(); std::cout <<threadId<<std::endl;};
~threads(){};
void create_thread();
void join_thread();
};
void
threads::create_thread()
{
// Create a thread that will function threadFunc()
err = pthread_create(&threadId, NULL, &threadFunc, NULL);
// Check if thread is created sucessfuly
if (err)
{
std::cout << "Thread creation failed : " << strerror(err);
}
else
{
std::cout << "Thread Created with ID : " << threadId << std::endl;
}
}
void
threads::join_thread()
{
err = pthread_join(threadId, NULL);
// check if joining is sucessful
if (err)
{
std::cout << "Failed to join Thread : " << strerror(err) << std::endl;
}
}
int main()
{
threads T;
T.create_thread();
T.join_thread();
std::cout << "Exiting Main" << std::endl;
return 0;
}