>>
>>Переписывал код на Си. На структуры... Размер тот же... огромный. Но не
>>может же быть такого! Тут проблема или FreeBSD или gcc
>>
>>Вобщем, проблема не решилась
>А покажите переписанный на C на структуры.
Основное:
============================ Так было на С++ ========================
class DaemonThread{
private:
pthread_t Thread;
int Socket;
struct sockaddr_in Addr;
time_t StartTime;
time_t Timeout;
char Module[NAMELEN];
/* TMP_MAX are defined into stdio.h */
char Name[TMP_MAX]; //NAMELEN];
int Status;
int FileDescriptor;
static void *Exec ( void * );
public:
char Buffer[BUFSIZE];
DaemonThread ();
void Init ( int );
int Start ( void );
/* Get private data */
int getStatus ( void );
void getStringStatus ( char * );
pthread_t getThread ( void );
int getSocket ( void );
char *getName ( void );
int getFileDescriptor ( void );
time_t getStartTime ( void );
time_t getTimeout ( void );
char *ParseBuffer ( char * );
void getInfo ( char * );
~DaemonThread ( void );
};
============================ Так стало на Си ========================
struct TDaemonThread{
pthread_t Thread;
int Socket;
struct sockaddr_in Addr;
time_t StartTime;
time_t Timeout;
char Module[NAMELEN];
/* TMP_MAX are defined into stdio.h */
char Name[TMP_MAX]; //NAMELEN];
int Status;
int FileDescriptor;
char Buffer[BUFSIZE];
};
typedef struct TDaemonThread DaemonThread;
void *Exec ( void * );
void Init ( DaemonThread *, int );
int Start ( DaemonThread * );
int getStatus ( DaemonThread * );
void getStringStatus ( DaemonThread *, char * );
pthread_t getThread ( DaemonThread * );
int getSocket ( DaemonThread * );
char *getName ( DaemonThread * );
int getFileDescriptor ( DaemonThread * );
time_t getStartTime ( DaemonThread * );
time_t getTimeout ( DaemonThread * );
char *ParseBuffer ( DaemonThread *, char * );
void getInfo ( DaemonThread *, char * );
void Destroy ( DaemonThread * );
========================
Теперь просто нужно каждый раз передавать указатель на структуру, чтобы знать с каким "объектом" идет работа. Например обращение Socket превращается в Th->Socket, а вызов из метода другого метода типа getName() превращается в getName ( Th ), где Th - это DaemonThread *.
Вот и всё.
Кто-нибудь решил проблему с сигналом и выделением памяти?