Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在类构造函数中初始化pthread\u t变量_C++_Pthreads_Pthread Join - Fatal编程技术网

C++ 如何在类构造函数中初始化pthread\u t变量

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

如何在类构造函数中初始化pthread\u t变量

C++静态分析(coverity)错误:非静态类成员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;
}
#包括
#包括
#包括
#包括
#包括
#包括
无效*
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;
}