#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <errno.h>
#include <pthread.h>
#include <signal.h>
#define TEST_MOUDLE "MXSDEBUG"
#define TEST_DEBUG
#ifdef TEST_DEBUG
#define COLOR_RED "\033[01;40;31m"
#define COLOR_BRED "\033[01;44;31m"
#define COLOR_GREEN "\033[01;40;32m"
#define COLOR_YELLOW "\033[01;40;33m"
#define COLOR_BLUE "\033[01;40;34m"
#define COLOR_PURPLE "\033[01;40;35m"
#define COLOR_DEFAULT "\033[0m"
#define DEBUG(lvl, mdl,format, args...) printf(COLOR_BRED"[%s %s]"COLOR_YELLOW"[%s][%s]"COLOR_RED"File: %s, "COLOR_PURPLE"Line: %d, "COLOR_BLUE"Fun: %s, "COLOR_GREEN""format""COLOR_DEFAULT,\
__DATE__, __TIME__, mdl, lvl, __FILE__, __LINE__, __FUNCTION__, ##args);
#define DBG_INFO(mdl, format, args...) DEBUG("INFO", mdl, format, ##args)
#define DBG_ERR(mdl,format, args...) DEBUG("ERR", mdl, format, ##args)
#define DBG_WARN(mdl,format, args...) DEBUG("WARN", mdl, format, ##args)
#else
#define DBG_INFO(mdl,format, args...)
#define DBG_ERR(mdl,format, args...)
#define DBG_WARN(mdl,format, args...)
#endif
pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;
void test_thread_run(void)
{
int cnt = 0;
DBG_INFO(TEST_MOUDLE, "thread test up 1\r\n");
while(1)
{
pthread_mutex_lock(&g_mutex);
pthread_cond_wait(&g_cond, &g_mutex);
pthread_mutex_unlock(&g_mutex);
DBG_INFO(TEST_MOUDLE, "1: already RUN.............1\r\n");
}
}
void test_thread_run_2(void)
{
int cnt = 0;
DBG_INFO(TEST_MOUDLE, "thread test up 2\r\n");
while(1)
{
pthread_mutex_lock(&g_mutex);
pthread_cond_wait(&g_cond, &g_mutex);
pthread_mutex_unlock(&g_mutex);
DBG_INFO(TEST_MOUDLE, "2: already RUN.............2\r\n");
}
}
void signal_CTRL_C(int signum) {
DBG_INFO(TEST_MOUDLE, "\033[0mcatch signal %d\n", signum);
exit(1);
}
void main(int argc, char *argv[])
{
int getint = 0;
int ret = 0;
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init( &attr );
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_t tid_2;
signal(SIGINT, signal_CTRL_C);
ret = pthread_create(&tid, &attr, (void*)test_thread_run, NULL);
ret = pthread_create(&tid_2, &attr, (void*)test_thread_run_2, NULL);
while(1)
{
DBG_INFO(TEST_MOUDLE, "pls input value:\r\n\r\n");
scanf("%d", &getint);
DBG_INFO(TEST_MOUDLE, "getint: %d\r\n", getint);
DBG_INFO(TEST_MOUDLE, "press any key to continue!\r\n");
if (getint == 999) {
pthread_cond_signal(&g_cond);
} else if (888 == getint) {
pthread_cond_broadcast(&g_cond);
} else {;}
}
}