关于thinkphp框架 html:imageBtn 的一个问题 <html:imageBtn name="edit" value="编辑" click="edit()" style="impBtn hMargin fLeft shadow" />这个单击的时候触发的函数里面没有参数啊?但是接收得时候function edit(id){alert(id);}他这个参数是怎么接受来的?知道的说一下啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你从edit方法和edit页面中找,会找到的 19 : 将日志记录写到文件 PFILE fp = CCU_NULL_PTR 191 CCU_FClose(fp) 192CHECK_RET_OK_RN(ulRet, ulRet) 193 pstMessage->unMessageContent.stLogContent 194g_apLogFileName[ucFileIndex] 195UINT32 WriteLogRecord(const CCU_MESSAGE * const pstMessage){/* 获取日志类型和日志等级 */CCU_LOG_TYPE enLogType = CCU_LOG_TYPE_UNKNOWN;CCU_LOG_LEVEL enLogLevel = CCU_LOG_LEVEL_UNKNOWN;INT iFileLen = 0;UINT8 ucFileIndex = 0;UINT32 ulRet = CCU_ERR;191;CHECK;enLogType = 194.enLogType;enLogLevel = 194.enLogLevel;/* 对获取到的日志等级进行校验 */if ( (CCU_LOG_TYPE_MAX > enLogType) && (CCU_LOG_LEVEL_MAX > enLogLevel)){if (g_ucLogFileCnt == 0){222;}/* 打开文件,用于获取文件长度 */fp = 44(g_apLogFileName[0], "rb");iFileLen = 0;if (52 != fp){ulRet = CCU_GetFileLen(fp, &iFileLen);CHECK_FUNC_RTN_VALUE_CLOSE(CCU_OK, ulRet, ulRet, fp);192;fp = 52;}/* 如果文件长度大于最大文件长度,则拷贝文件 */if (iFileLen >= MAX_LOG_FILE_SIZE){for (ucFileIndex = g_ucLogFileCnt - 1; ucFileIndex > 0; ucFileIndex--){(VOID)MoveFile(195, g_apLogFileName[ucFileIndex - 1]);}}/* 一次性创建所有日志文件,上传日志文件模块要求这么做 */for (同上){/* 如果文件不存在,则创建它 */if (CCU_OK != CCU_TestFileExist ( 195 ) ){ulRet = CCU_CreateFile (195 );193}}fp = 44(g_apLogFileName[0], "ab+");CHECK(fp, CCU_ERR);CCU_FPrintf(fp, "%s%s", pstMessage->chTime, RECORD_HEADSEPARAROR); ..(fp, .., LogLevel[194.enLogLevel], ..);..(fp, .., ModuleName[194.enLogType], RECORD_BODYSEPARAROR);..(fp, .., 194.chLogContent, RECORD_SEPARATOR);192;221;}222;}20 : 将Opt 记录写到文件 pstMessage->unMessageContent.stOptContent 201CCU_UNKNOWN_OPT_LEVEL 202 g_ucOptRecordIndex[ enOptType ] 203UINT32 WriteOptRecord(const CCU_MESSAGE * const pstMessage){CHAR chRecordBuf[ MAXOPTRECODELEN ] = {0};INT iRecordLen = 0;/* 获取操作记录类型和等级 */CCU_OPT_TYPE enOptType = CCU_UNKNOWN_OPT_TYPE;CCU_OPT_LEVEL enOptLevel = 202;CHECK;enOptType = 201.enOptType;enOptLevel = 201.enOptLevel;/* 判断操作类型和登记的合法性 */if ( (CCU_MAX_OPT_TYPE > enOptType) && ( CCU_MAX_OPT_LEVEL > enOptLevel) ){/* 创建操作记录 */if (CCU_OK != CCU_CreateOptRecord(pstMessage->chTime, (UINT8*)OptLevel[ enOptLevel ], 201.chOptContent, 201.iOptContentLen,(UINT8*)chRecordBuf, &iRecordLen)){ 222;}/* 写操作记录文件 */if(CCU_OK != CCU_WRITEOPTFILE(OptFileName[ enOptType ],&203, chRecordBuf, (UINT)iRecordLen)){ 222;}/* 实现循环记录 */203 = ( 203 + 1 ) % OPTRECORDCOUNT;221;}222;}21 : 将功耗记录写到文件 g_ucPowerRecordIndex[ enPowerType ] 219pstMessage->unMessageContent.stPowerContent 218 enPowerType 217 UINT32 WritePowerRecord(const CCU_MESSAGE * const pstMessage){CHAR chRecordBuf[ MAXPOWERCODELEN ];INT iRecordLen = MAXPOWERCODELEN;/* 获取功率类型 */CCU_POWER_TYPE 217 = CCU_UNKNOW_POWER_TYPE;CHECK enPowerType = 218.217;/* 对获取到的功率类型进行校验 */if (217 < CCU_MAX_POWER_TYPE){/* 创建功率记录 */if (CCU_OK != CCU_CreatePowerRecord( pstMessage->chTime, 218.chPowerContent,(UINT8 *)chRecordBuf, &iRecordLen )){222;}/* 将功率记录写到文件 */if(CCU_OK != CCU_WRITEPOWERFILE(PowerFileName[217],&219,chRecordBuf, (UINT)iRecordLen)){222;}/* 实现循环记录 */219= (219 + 1 ) % POWERRECORDCOUNT;221;}222;}22 : 写文件线程函数 CCU_MemFree(CCU_MEM_INFO 225 CCU_MESSAGE *pstMessage = CCU_NULL_PTR 226LOG_DBG_ERROR 227VOID *CCU_WriteFileProc(VOID * f){UINT32 ulRet = CCU_ERR;226;UINT32 ulRunTime = 0;/* 为消PClint */f = f;/* 已经从消息队列获取的记录总条数*/for (;;){/* 不停地从消息队列取消息 */if (CCU_OK == CCU_GetMessageFromQueue( &pstMessage )){/* 检测获取的指针值的有效性 */CHECKPARA_CONTINUE(pstMessage)/* 判断消息类型 */switch (pstMessage->enMessageType){case CCU_LOG_MESSAGE_TYPE:ulRet = WriteLogRecord(pstMessage);CHECK_RTN_FREE_CONTINUE(ulRet, pstMessage);break;.. CCU_OPT_MESSAGE_TYPE:..WriteOptRecord(pstMessage);../* 保存当前地游标 */(VOID)CCU_SaveIndex((UINT*)g_ucOptRecordIndex, (UINT*)g_ucPowerRecordIndex);..;.. CCU_POWER_MESSAGE_TYPE:ulRet = WritePowerRecord(pstMessage);../* 保存当前地游标 */同上;..;default:227("Unknow message type : %d", pstMessage->enMessageType);..;}/* 释放在发消息时申请的内存 */225, pstMessage);pstMessage = 52;}else{/* 监控线程要求十秒之内必须调用监控线程的函数,本线程是1s调用一次 */if (ulRunTime++ >= 1000){(VOID)Monitor_AddThreadCounter(LOG_WRITE_THREAD);ulRunTime = 0;}ADA_Sleep(1);}}}23 : 开线程,开始写文件 UINT32 CCU_CreateWriteThread( VOID ){UINT32 ulThreadId = 0;/* 创建读消息地线程 */if (CCU_OK != ADA_CreatThread((FUNC_ENTRY)CCU_WriteFileProc,52, CCU_NORMAL_STACK_SIZE, &ulThreadId)){227("----------create fail no is %#x", errno);222;}if (CCU_OK != Monitor_CreateThreadMonitorCB( LOG_WRITE_THREAD )){227("Create Thread Monitor CB Fail");}LOG_DBG_INFO("create write log thread success");221;}24 : 写日志文件接口 return CCU_485_ERR_INVALID_PARAMETER 241UINT32 CCU_LogWrite(CCU_LOG_TYPE enLogType, CCU_LOG_LEVEL enLogLevel, const CHAR *pucFormat, ...){va_list ap = {0};CHAR acLineBuf[MAX_RECORD_LEN] = {0};if ((CCU_LOG_TYPE_MAX <= enLogType) || (CCU_LOG_LEVEL_MAX <= enLogLevel)){241;}CHECK CCU_VAStart(ap, pucFormat);vsnprintf(acLineBuf, MAX_RECORD_LEN, pucFormat, ap);CCU_VAEnd(ap);acLineBuf[MAX_RECORD_LEN - 1] = '\0';/* 组装日志消息并发送到消息队列 */return CCU_SendLogMessage2Queue( enLogType, enLogLevel, acLineBuf );} ecmall后台管理点击会员出现的问题 ecshop问题(急) php 实现可以根据url 自动下载页面的功能 请教下这两个商城是用哪个程序套的。谢谢 邮箱问题 急!!! dsoframer为何总不能保存到服务器上啊? 抓取淘宝省市数据库地址 求教一个paypal快速支付接口的问题 php全局变量 rss订阅功能 织梦的一些问题? imagecreatetruecolor这个函数是在那里定义的??
CHECK_RET_OK_RN(ulRet, ulRet) 193 pstMessage->unMessageContent.stLogContent 194
g_apLogFileName[ucFileIndex] 195
UINT32 WriteLogRecord(const CCU_MESSAGE * const pstMessage)
{/* 获取日志类型和日志等级 */CCU_LOG_TYPE enLogType = CCU_LOG_TYPE_UNKNOWN;
CCU_LOG_LEVEL enLogLevel = CCU_LOG_LEVEL_UNKNOWN;INT iFileLen = 0;UINT8 ucFileIndex = 0;UINT32 ulRet = CCU_ERR;
191;CHECK;enLogType = 194.enLogType;enLogLevel = 194.enLogLevel;/* 对获取到的日志等级进行校验 */
if ( (CCU_LOG_TYPE_MAX > enLogType) && (CCU_LOG_LEVEL_MAX > enLogLevel))
{if (g_ucLogFileCnt == 0){222;}
/* 打开文件,用于获取文件长度 */fp = 44(g_apLogFileName[0], "rb");
iFileLen = 0;if (52 != fp){ulRet = CCU_GetFileLen(fp, &iFileLen);
CHECK_FUNC_RTN_VALUE_CLOSE(CCU_OK, ulRet, ulRet, fp);192;fp = 52;}
/* 如果文件长度大于最大文件长度,则拷贝文件 */if (iFileLen >= MAX_LOG_FILE_SIZE)
{for (ucFileIndex = g_ucLogFileCnt - 1; ucFileIndex > 0; ucFileIndex--)
{(VOID)MoveFile(195, g_apLogFileName[ucFileIndex - 1]);
}}/* 一次性创建所有日志文件,上传日志文件模块要求这么做 */for (同上)
{/* 如果文件不存在,则创建它 */if (CCU_OK != CCU_TestFileExist ( 195 ) )
{ulRet = CCU_CreateFile (195 );193}}fp = 44(g_apLogFileName[0], "ab+");
CHECK(fp, CCU_ERR);CCU_FPrintf(fp, "%s%s", pstMessage->chTime, RECORD_HEADSEPARAROR);
..(fp, .., LogLevel[194.enLogLevel], ..);..(fp, .., ModuleName[194.enLogType], RECORD_BODYSEPARAROR);
..(fp, .., 194.chLogContent, RECORD_SEPARATOR);192;221;}222;}
20 : 将Opt 记录写到文件 pstMessage->unMessageContent.stOptContent 201
CCU_UNKNOWN_OPT_LEVEL 202 g_ucOptRecordIndex[ enOptType ] 203
UINT32 WriteOptRecord(const CCU_MESSAGE * const pstMessage){
CHAR chRecordBuf[ MAXOPTRECODELEN ] = {0};INT iRecordLen = 0;/* 获取操作记录类型和等级 */
CCU_OPT_TYPE enOptType = CCU_UNKNOWN_OPT_TYPE;CCU_OPT_LEVEL enOptLevel = 202;
CHECK;enOptType = 201.enOptType;enOptLevel = 201.enOptLevel;/* 判断操作类型和登记的合法性 */
if ( (CCU_MAX_OPT_TYPE > enOptType) && ( CCU_MAX_OPT_LEVEL > enOptLevel) ){
/* 创建操作记录 */if (CCU_OK != CCU_CreateOptRecord(pstMessage->chTime, (UINT8*)OptLevel[ enOptLevel ],
201.chOptContent, 201.iOptContentLen,(UINT8*)chRecordBuf, &iRecordLen)){ 222;}/* 写操作记录文件 */
if(CCU_OK != CCU_WRITEOPTFILE(OptFileName[ enOptType ],&203, chRecordBuf, (UINT)iRecordLen))
{ 222;}/* 实现循环记录 */203 = ( 203 + 1 ) % OPTRECORDCOUNT;221;}222;}
21 : 将功耗记录写到文件 g_ucPowerRecordIndex[ enPowerType ] 219
pstMessage->unMessageContent.stPowerContent 218 enPowerType 217
{CHAR chRecordBuf[ MAXPOWERCODELEN ];INT iRecordLen = MAXPOWERCODELEN;
/* 获取功率类型 */CCU_POWER_TYPE 217 = CCU_UNKNOW_POWER_TYPE;CHECK enPowerType = 218.217;
/* 对获取到的功率类型进行校验 */if (217 < CCU_MAX_POWER_TYPE){/* 创建功率记录 */
if (CCU_OK != CCU_CreatePowerRecord( pstMessage->chTime,
218.chPowerContent,(UINT8 *)chRecordBuf, &iRecordLen )){222;}
/* 将功率记录写到文件 */if(CCU_OK != CCU_WRITEPOWERFILE(PowerFileName[217],&219,
chRecordBuf, (UINT)iRecordLen)){222;}/* 实现循环记录 */219= (219 + 1 ) % POWERRECORDCOUNT;221;}222;}
22 : 写文件线程函数 CCU_MemFree(CCU_MEM_INFO 225 CCU_MESSAGE *pstMessage = CCU_NULL_PTR 226
LOG_DBG_ERROR 227
VOID *CCU_WriteFileProc(VOID * f)
{UINT32 ulRet = CCU_ERR;226;UINT32 ulRunTime = 0;/* 为消PClint */f = f;
/* 已经从消息队列获取的记录总条数*/for (;;){/* 不停地从消息队列取消息 */
if (CCU_OK == CCU_GetMessageFromQueue( &pstMessage )){/* 检测获取的指针值的有效性 */
CHECKPARA_CONTINUE(pstMessage)/* 判断消息类型 */switch (pstMessage->enMessageType){
case CCU_LOG_MESSAGE_TYPE:ulRet = WriteLogRecord(pstMessage);CHECK_RTN_FREE_CONTINUE(ulRet, pstMessage);break;
.. CCU_OPT_MESSAGE_TYPE:..WriteOptRecord(pstMessage);..
/* 保存当前地游标 */(VOID)CCU_SaveIndex((UINT*)g_ucOptRecordIndex, (UINT*)g_ucPowerRecordIndex);..;
.. CCU_POWER_MESSAGE_TYPE:ulRet = WritePowerRecord(pstMessage);../* 保存当前地游标 */同上;..;
default:227("Unknow message type : %d", pstMessage->enMessageType);..;
}/* 释放在发消息时申请的内存 */225, pstMessage);pstMessage = 52;}else{
/* 监控线程要求十秒之内必须调用监控线程的函数,本线程是1s调用一次 */if (ulRunTime++ >= 1000)
{(VOID)Monitor_AddThreadCounter(LOG_WRITE_THREAD);ulRunTime = 0;}ADA_Sleep(1);}}}
23 : 开线程,开始写文件 UINT32 CCU_CreateWriteThread( VOID ){UINT32 ulThreadId = 0;
/* 创建读消息地线程 */if (CCU_OK != ADA_CreatThread((FUNC_ENTRY)CCU_WriteFileProc,
52, CCU_NORMAL_STACK_SIZE, &ulThreadId)){227("----------create fail no is %#x", errno);222;}
if (CCU_OK != Monitor_CreateThreadMonitorCB( LOG_WRITE_THREAD )){
227("Create Thread Monitor CB Fail");}LOG_DBG_INFO("create write log thread success");221;}
24 : 写日志文件接口 return CCU_485_ERR_INVALID_PARAMETER 241
UINT32 CCU_LogWrite(CCU_LOG_TYPE enLogType, CCU_LOG_LEVEL enLogLevel, const CHAR *pucFormat, ...)
{va_list ap = {0};CHAR acLineBuf[MAX_RECORD_LEN] = {0};
if ((CCU_LOG_TYPE_MAX <= enLogType) || (CCU_LOG_LEVEL_MAX <= enLogLevel))
{241;}CHECK CCU_VAStart(ap, pucFormat);
vsnprintf(acLineBuf, MAX_RECORD_LEN, pucFormat, ap);CCU_VAEnd(ap);acLineBuf[MAX_RECORD_LEN - 1] = '\0';
/* 组装日志消息并发送到消息队列 */return CCU_SendLogMessage2Queue( enLogType, enLogLevel, acLineBuf );}