博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写日志函数和持续优化
阅读量:4704 次
发布时间:2019-06-10

本文共 863 字,大约阅读时间需要 2 分钟。

首先看以下的函数

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);//关闭文件}

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

改动例如以下:

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);//关闭文件	}}

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

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

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

第二种方法就是用一个线程来接收其它线程的写日志的消息。有一个线程来专门写日志。

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

 

编程和设计的过程,就是一个逐步完好的过程,没有人一開始会想的非常全面,也没有绝对的错误的代码和设计。

假设有明显的功能错误。在设计过程中。就会改正。就比方最開始的那个函数,fp为空的概率有多少?所以一般不会出错。当日志函数仅仅在单线程中使用。那考虑加锁和多线程消息也是多余。所以。要看应用场景。

程序猿都非常反感需求的变化。需求,就是应用场景。

仅仅有在需求确认了,才干够设计出相对匹配的方案出来。不一定是完美的,但肯定是在综合各种因素的情况下,是最优的。

周期是要考虑的,成本是要考虑的。

 

 转载请注明原创链接:

 

 

 

转载于:https://www.cnblogs.com/zfyouxi/p/5095802.html

你可能感兴趣的文章
兴趣问题清单
查看>>
力扣——N叉树的后序遍历
查看>>
C++ namespace命名空间
查看>>
用Hadoop构建电影推荐系统
查看>>
automake连载---关于两个文件configure.in和Makefile.am的编写
查看>>
JQuery选择器中含有冒号的ID处理差异的分析
查看>>
分享:一款前端布局工具(alloydesigner)
查看>>
python模拟老师授课下课情景
查看>>
C# 定积分求周长&面积原理 代码实现
查看>>
freemarker测试
查看>>
外观模式
查看>>
C# Thread IsAlive 理解
查看>>
grep 详解
查看>>
安装完 MySQL 后必须调整的 10 项配置
查看>>
51学习笔记之关键词data、bdata、idata、pdata、xdata、code的含义
查看>>
rc.local中的memcached命令不执行
查看>>
分布式文件管理系统MFS
查看>>
前端开发本地存储之cookie
查看>>
Android 检测网络连接状态
查看>>
快速排序
查看>>