Haven已经在这里待了一段时间,但我被困了...... 我似乎无法弄清楚这段代码存在的问题
logger.cpp
#include "logger.h"
#include <unistd.h>
#include <stdlib.h>
void* __logger(void* data) // dummy function
{
sleep(10);
return NULL;
}
logger_t::logger_t()
{
// create a pipe for communicating with thread
if (pipe(fd) == -1) // something went wrong
{
// error here
exit(EXIT_FAILURE);
}
// now create the thread that will write to the log
if (pthread_create(log_pid, NULL, &__logger, NULL)) // something went wrong
{
exit(EXIT_FAILURE);
}
}
logger_t::~logger_t()
{
close(fd[1]); // close read end of pipe, logging thread will read EOF and exit
if (pthread_join(*log_pid, NULL))
{
exit(EXIT_FAILURE);
}
}
logger.h
#ifndef LOGGER_H
#define LOGGER_H
#include <pthread.h>
class logger_t
{
public:
logger_t();
~logger_t();
private:
int fd[2];
pthread_t* log_pid;
};
#endif // LOGGER_H
的main.cpp
#include "logger.h"
int main()
{
logger_t proglog;
return 0;
}
代码编译得很好,但是当我运行它时,我在pthread_create()调用期间遇到了分段错误......有什么想法吗?我已经删除了程序中的所有内容,但我仍然遇到了同样的崩溃......
答案 0 :(得分:2)
来自pthread_create()
的手册页:
在返回之前,成功调用pthread_create()会存储该ID 线程指向的缓冲区中的新线程;
thread
参数应指向有效的内容 - 在您的情况下,您传入的是未初始化的指针。也许这与它有关。要确认,请在调试器(例如gdb)中运行它并查看。
另外,正如您所说,这是c ++,您应该使用std::thread()
。