Если подвести итог вышесказанному получиться что то такое
Код
FILE *g_log_fp;
int g_log_file_size;
void LOG_LogMessage(char *file, char *message, int value, int close)
{
int file_size = 0;
char buff[256] = { '\0' };
char sval[10];
ItoA(value, sval);
strcat(buff, message);
strcat(buff, sval);
if (g_log_fp == NULL)
{
g_log_fp = fopen(file, "a+");
if (g_log_fp != NULL)
fputs(buff, g_log_fp);
}
else
fputs(buff, g_log_fp);
fseek(g_log_fp, 0, SEEK_SET);
fseek(g_log_fp, 0, SEEK_END);
file_size = ftell(g_log_fp);
if (close)
fclose(g_log_fp);
else
fflush(g_log_fp);
if (file_size >= MAX_LOG_FILE_SIZE)
{
//LOG_Clear() ???
//go to the next file ???
}
}
или я что то упустил в логике?
или через очередь ?
Код
char log_buffer[1024];
MSG_Q_ID log_messages_Q;
void LOG_Init(void)
{
log_messages_Q = msgQCreate(100, 1024, 0);
}
void LOG_SengQ(char *message, int value)
{
int size = strlen(message) + 4; //4 - for value
char sval[10];
log_buffer[0] = '\0';
ItoA(value, sval);
strcat(log_buffer, message);
strcat(log_buffer, sval);
msgQSend(log_messages_Q, log_buffer, size, NO_WAIT, MSG_PRI_NORMAL);
}
и потом в отдельном потоке msgQReceive(log_messages_Q, log_buffer, 1024, NO_WAIT); ?
я не думаю что очередь дает какие то преимущества.
Сообщение отредактировал Jenya7 - Mar 20 2018, 10:29