如何在类构造函数中初始化pthread_t变量

How to initialized pthread_t variable in class constructor

本文关键字:pthread 变量 初始化 构造函数      更新时间:2023-10-16

如何在类构造函数中初始化pthread_t变量。

C++ 静态分析(覆盖性(错误:非静态类成员 threadId 未在此构造函数中初始化,也未在它调用的任何函数中初始化。

#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;
}

注意:

  • 我已经检查了Stackoverflow中所有现有的问题和答案。 但他们都没有明确的答案。
  • 上面的c ++代码是一个示例代码(从互联网上复制并更新以显示我的实际问题(

我已经尝试过这个并且它的工作(发布答案,以帮助他人(

#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;
}