我正在使用boost线程在C ++中创建一个程序,其中Hilo类包含一个Thread,它负责更新类的相应属性......我的问题是我尝试“Agregar hilo” (添加Hilo)我得到一个分段错误,我已经尝试了一切,没有找到原因? 这是完整的代码可以帮助我(PDTA:我的工作Centos模式控制台)
//file: Hilo.h
#ifndef HILO_H
#define HILO_H1
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
#include <string>
using namespace std;
class Hilo{
private:
int id;
string mensaje;
int tiempo_vida;
boost::thread hilo;
public: void accion();
Hilo(int,int);
~Hilo();
void setId(int);
int getId() const;
void setTiempoVida(int);
int getTiempoVida() const;
string getMensaje() const;
};//endif
//file: Hilo.cpp
#include "Hilo.h"
#include <iostream>
Hilo::Hilo(int id,int tiempo_vida){
this->id=id;
this->tiempo_vida=tiempo_vida;
this->hilo=boost::thread(&Hilo::accion,this);}
Hilo::~Hilo(){}
void Hilo::accion(){
unsigned a=1;
boost::posix_time::seconds velocidad_(a);
while (this->tiempo_vida>=0){
stringstream sstm;
sstm<<"Hilo numero:"<<this->id <<" tiempo de vida restante:"<<(this->tiempo_vida--);
this->mensaje=sstm.str();
boost::this_thread::sleep(velocidad_);}
}
void Hilo::setId(int id){
this->id=id;}
int Hilo::getId() const{
return this->id;}
void Hilo::setTiempoVida(int tiempo_vida){
this->tiempo_vida=tiempo_vida;}
int Hilo::getTiempoVida() const{
return this->tiempo_vida;}
string Hilo::getMensaje() const{
return this->mensaje;}
//file: Operaciones.h
#ifndef OPERACIONES_H
#define OPERACIONES_H1
#include "Hilo.h"
class Operaciones{
private:
int contadorHilos;
public:
Operaciones();
void agregarHilo(int);
void verHilo(int);
};#endif
//file: Operaciones.cpp
#include "Operaciones.h"
Operaciones::Operaciones(){
this->contadorHilos=0;}
void Operaciones::agregarHilo(int tiempo_vida){
Hilo hil(this->contadorHilos,tiempo_vida);
this->contadorHilos++;
}
void Operaciones::verHilo(int hilo){} //en construccion
//file: Principal.cpp
#include <iostream>
#include <cstdlib>
#include "Operaciones.h"
using namespace std;
int main(){
bool run=true;
int opcion;
Operaciones oper;
system("clear");
while(run==true){
cout<<"APLICACION MULTI-HILO\nDigite alguna de las opciones\n1. Crear nuevo hilo\n2.Observar hilo\n3. Salir\n";
cin>>opcion;
switch(opcion){
case 1:
system("clear");
cout<<"Se va a crear un nuevo hilo\n";
cout<<"Digite el tiempo de vida del hilo(segundos)";
int tiempo;
cin>>tiempo;
oper.agregarHilo(tiempo);
cout<<"Se ha agregado correctamente";
break;
case 2:
system("clear");
cout<<"Se va a observar un hilo\n";
break;
case 3:
system("clear");
cout<<"Fin del programa, gracias\n";
run=false;
break;
default:
system("clear");
cout<<"La opcion que ingreso es incorrecta\n";
break;
}
sleep (1.1);
system("clear");
}
return 0;
}
答案 0 :(得分:1)
当您调用agregarHilo
时,会构造一个Hilo
对象来启动一个线程。
当agregarHilo
立即返回时,该对象将被销毁,当线程尝试访问它时,它将访问被销毁的对象。
您需要确保Hilo
对象超过线程,可能是通过在某个集合Operaciones
实例中跟踪它们,如std::vector
。