设为首页 加入收藏

TOP

C语言程序监控变量的变化
2015-07-20 12:52:42 来源: 作者: 【 】 浏览:22
Tags:语言程序 监控 变量 变化

前几天有一个朋友有一个需求:在一个变量的时候,能够自动执行一个回调函数.做一个类似监控变量的demo。


后来就小写一个C语言程序监控变量变化的demo,特以此分享一下,作为以后备用。


#include
#include
#include
#include



int g_var = 0;


//用以标识是否已经改变的条件变量
pthread_cond_t has_changed = PTHREAD_COND_INITIALIZER;
//条件变量需要配套的互斥锁
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;



//该函数模拟你说的侦测到变量改变需要调用的函数
void func(int n)
{
? ? printf("var changed == %d\n",n);
}
void* scanThread(void *arg)
{
? ? printf("created\n");
? ? int *pNumber = (int *)arg;
? ? int lastNumber = *pNumber;
? ? while(1)
? ? {
? ? ? ? while(lastNumber == *pNumber )
? ? ? ? ? ? pthread_cond_wait(&has_changed,&lock);
? ? ? ? func(lastNumber = *pNumber);
? ? }
? ? return NULL;
}
int main()
{
? ? pthread_t scanthreadid;
? ? pthread_create(&scanthreadid,NULL,scanThread,(void *)&g_var);



? ? srand(time(NULL));
? ? for(;;)
? ? {
? ? ? ? //模拟真实情况? 随机的时间来修改g_var的值 然后修改成随机的值
? ? ? ? sleep(rand()%5+1);
? ? ? ? g_var = rand()%1000;
? ? ? ? printf("moding ==%d \n",g_var);
? ? ? ? pthread_cond_signal(&has_changed);
? ? ? ? //


? ? }


? ? //回收子线程
? ? pthread_join(scanthreadid,NULL);?


? //清除资源
? ? pthread_mutex_destroy(&lock);
? ? pthread_cond_destroy(&has_changed);
? ? return 0;
}


?


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇深入理解进程间通信之信号 下一篇C++实现一个简单图书借阅流程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: