写日志函数和持续优化

首先看下面的函数

<span style="font-size:18px;">void writelog(char* file, char* msg)
{
	FILE*fp=NULL; 

	int nDataLen = strlen(msg);

	fp=fopen(file,"ab+");//只供读取 
	if(fp!=NULL)
	{
		fwrite(msg, nDataLen, 1, fp);
        
	}
         fclose(fp);//关闭文件
}</span>

这个有什么问题呢?当fp为空的时候,是不是也会执行fclose(fp)?

修改如下:

<span style="font-size:18px;">void writelog(char* file, char* msg)
{
	FILE*fp=NULL; 

	int nDataLen = strlen(msg);

	fp=fopen(file,"ab+");//只供读取 
	if(fp!=NULL)
	{
		fwrite(msg, nDataLen, 1, fp);
        fclose(fp);//关闭文件
	}
}</span>

这样是不是就没问题了呢?

当多线程中调用这个日志函数的时候,会不会有问题?

所以有一种方法就是加锁,但这样效率可能会低一些。

另外一种方法就是用一个线程来接收其他线程的写日志的消息,有一个线程来专门写日志。

这样工作线程不会阻塞,可提高并发效率。

 

编程和设计的过程,就是一个逐步完善的过程,没有人一开始会想的很全面,也没有绝对的错误的代码和设计。如果有明显的功能错误,在设计过程中,就会改正。就比如最开始的那个函数,fp为空的概率有多少?所以一般不会出错。当日志函数只在单线程中使用,那考虑加锁和多线程消息也是多余。所以,要看应用场景。

程序员都很反感需求的变化。需求,就是应用场景。只有在需求确认了,才可以设计出相对匹配的方案出来,不一定是完美的,但肯定是在综合各种因素的情况下,是最优的。周期是要考虑的,成本是要考虑的。

 

 转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/38310669

 



 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值