Имеется следующий код
#include "Library.h"
#include "Socket.h"
Database<User> object;
void *cnthread(void*);
void *funthread(void*);
bool comand(string &line,Database<User> &object) {
Server_comand com;
int result = com.strpars(line);
if (result == 1) {
string test = object.countlist();
cout << "Список пользователей:" << endl;
cout << test << endl;
return true;
}
else if (result == 2) {
int index = object.findNextContains(com.Getnum());
if (index !=0 ) {
User& curUser = object.getData(com.Getnum());
curUser.on_off(false);
return true;
}
cout << "Error not found! User" << endl;
}
else if (result == 3) {
return false;
}
else {
cout << "Error comand not found!" << endl;
return true;
}
}
int main(int argc, char * argv[]) {
.......
int rc1;
pthread_t threadc;
//Создаём нить сервера для ввода команд
if( (rc1=pthread_create( &threadc, NULL, &cnthread,(void*)&object)) ) {
printf("Thread creation failed: %d\n", rc1);
}
while (1) {
if (recievpack.command() == INSTR_REG) {
User usr;
if ( index == 0) {
pthread_t thread;
int rc, id_user = recievpack.id_usr();
if (id_user != 0){
usr.recordId(recievpack.id_usr());
object.insertData(usr, id_user);
usr.Struct_info(client_info);
usr.on_off(true);
//Создаём нить
if( (rc=pthread_create( &thread, NULL, &funthread, (void*)&usr)) ) {
printf("Thread creation failed: %d\n", rc);
}
sr.SendLine(recievpack.MakePack(ACK, 0, usr.recordId()), client_info);
}
}
else{
//Послать команду exit либо generate
}
}
else {
if ( index != 0) {
User& getuser = object.getData(index);
getuser.Current_pack(receive);
getuser.Package_come(true);
}
}
receive.erase();
}
return 0;
}
void *cnthread(void* param){
//Database<User> &list =( Database<User>& )param;
while(1) {
string pars;
getline(cin, pars);
cout << object.countlist() << endl;
//cout << list.countlist() << endl;
if (comand(pars,object)==false)
break;
}
exit(0);
}
void *funthread(void* param) {
User *user = (User*)param;
//int index = *((int*)param);
User& usr = object.getData(user->recordId());
cout << object.countlist() << endl;
......
Не могу понять почему при использовании функции comand работает, объект класса object становится пустым, как будто новый объект создаётся. Если использовать закоменченную строчку
//Database<User> &list =( Database<User>& )param;
pthread_create( &threadc, NULL, &cnthread,(void*)&object);
if( (rc=pthread_create( &thread, NULL, &funthread, (void*)&usr))