求优化
时间:2011-12-03
来源:互联网
请各位大侠指点,这是线程中一段代码,请问什么地方还可以继续优化,提高代码执行速度
int EM9170_CAN::PackagePro( char* Buf, int len )
{
// 对接收的数据进行处理,这里为简单的数据回发
int i1;
PCAN_PACKET pmsg;
CString str;
double df_time;
CString str_data;
int i;
pmsg = (PCAN_PACKET)Buf;
DWORD Ms_timer;
Ms_timer = GetTickCount();
if(0 == First_Recv_Flag)
{
df_time = 0.0010;
First_Time = Ms_timer;
First_Recv_Flag = 1;
m_count_Recv = 0;
My_Max_Count = 0;
m_Str = _T("");
str = _T(" 0.000000 Start of measurement\r");
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( str );
}
else
{
df_time = (double)((Ms_timer - First_Time) / 1000.000);
}
if(pmsg->dwID > 0x7ff)
{
str.Format(_T("%11.6f 1 %Xx RX d %d "),df_time,pmsg->dwID,pmsg->dwDatLen);
}
else
{
str.Format(_T("%11.6f 1 %-16XRX d %d "),df_time,pmsg->dwID,pmsg->dwDatLen);
}
for(i = 0; i < pmsg->dwDatLen; i++)
{
str_data.Format(_T("%-2x "),pmsg->ucDat[i]);
str += str_data;
}
m_count_Recv ++;
if(m_count_Recv >= FRAME_BUF_LEN)
{
str += _T("\r");
m_Str += str;
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( m_Str);
m_Str = _T("");
m_count_Recv = 0;
My_Max_Count++;
if(My_Max_Count > MAX_COUNT)
{
str = _T("End TriggerBlock\r");
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( str );
m_FRecordFile.Close();
m_count_Recv = 0;
if(m_File_Num < MAX_FILE)
{
m_File_Num ++;
First_Recv_Flag = 0;
My_Max_Count = 0;
CString File_Name = _T("");
CString PointFile;
File_Name.Format(_T("%d"), m_File_Num);
if(1 == m_Can_Num)
{
PointFile = _T("\\USBDisk\\CAN1RecordData") + File_Name + _T(".txt");
}
else
{
PointFile = _T("\\USBDisk\\CAN2RecordData") + File_Name + _T(".txt");
}
m_FRecordFile.Open(PointFile,CFile::modeCreate| CFile::modeWrite);
CString str_head = _T("date Sun Oct 16 06:09:42 pm 2011\r\nbase hex timestamps absolute \r\ninternal events logged \r\nBegin Triggerblock Sun Oct 16 06:09:42 pm 2011\r");
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( str_head );
}
else
{
AfxMessageBox(_T("文件记录超出范围请保存后重新开始程序"));
CloseCAN( ); /*关闭can接收*/
m_Error_Flag = 1;
}
}
}
else
{
str += _T("\r\n");
m_Str += str;
}
return i1;
}
int EM9170_CAN::PackagePro( char* Buf, int len )
{
// 对接收的数据进行处理,这里为简单的数据回发
int i1;
PCAN_PACKET pmsg;
CString str;
double df_time;
CString str_data;
int i;
pmsg = (PCAN_PACKET)Buf;
DWORD Ms_timer;
Ms_timer = GetTickCount();
if(0 == First_Recv_Flag)
{
df_time = 0.0010;
First_Time = Ms_timer;
First_Recv_Flag = 1;
m_count_Recv = 0;
My_Max_Count = 0;
m_Str = _T("");
str = _T(" 0.000000 Start of measurement\r");
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( str );
}
else
{
df_time = (double)((Ms_timer - First_Time) / 1000.000);
}
if(pmsg->dwID > 0x7ff)
{
str.Format(_T("%11.6f 1 %Xx RX d %d "),df_time,pmsg->dwID,pmsg->dwDatLen);
}
else
{
str.Format(_T("%11.6f 1 %-16XRX d %d "),df_time,pmsg->dwID,pmsg->dwDatLen);
}
for(i = 0; i < pmsg->dwDatLen; i++)
{
str_data.Format(_T("%-2x "),pmsg->ucDat[i]);
str += str_data;
}
m_count_Recv ++;
if(m_count_Recv >= FRAME_BUF_LEN)
{
str += _T("\r");
m_Str += str;
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( m_Str);
m_Str = _T("");
m_count_Recv = 0;
My_Max_Count++;
if(My_Max_Count > MAX_COUNT)
{
str = _T("End TriggerBlock\r");
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( str );
m_FRecordFile.Close();
m_count_Recv = 0;
if(m_File_Num < MAX_FILE)
{
m_File_Num ++;
First_Recv_Flag = 0;
My_Max_Count = 0;
CString File_Name = _T("");
CString PointFile;
File_Name.Format(_T("%d"), m_File_Num);
if(1 == m_Can_Num)
{
PointFile = _T("\\USBDisk\\CAN1RecordData") + File_Name + _T(".txt");
}
else
{
PointFile = _T("\\USBDisk\\CAN2RecordData") + File_Name + _T(".txt");
}
m_FRecordFile.Open(PointFile,CFile::modeCreate| CFile::modeWrite);
CString str_head = _T("date Sun Oct 16 06:09:42 pm 2011\r\nbase hex timestamps absolute \r\ninternal events logged \r\nBegin Triggerblock Sun Oct 16 06:09:42 pm 2011\r");
m_FRecordFile.Seek(0,CFile::end);
m_FRecordFile.WriteString( str_head );
}
else
{
AfxMessageBox(_T("文件记录超出范围请保存后重新开始程序"));
CloseCAN( ); /*关闭can接收*/
m_Error_Flag = 1;
}
}
}
else
{
str += _T("\r\n");
m_Str += str;
}
return i1;
}
作者: sky_ghm 发布时间: 2011-12-03
for(i = 0; i < pmsg->dwDatLen; i++)
{
str_data.Format(_T("%-2x "),pmsg->ucDat[i]);
str += str_data;
}
我感觉这一块可以优化一点,因为format函数要考虑很多的事情,俺自己写一个专用的,也许会快。
{
str_data.Format(_T("%-2x "),pmsg->ucDat[i]);
str += str_data;
}
我感觉这一块可以优化一点,因为format函数要考虑很多的事情,俺自己写一个专用的,也许会快。
作者: jennyvenus 发布时间: 2011-12-03
C/C++ code
俺就自己写过一个方法,快不快俺也不知道。
先准备好一个全局的表g____hex2str for( i = 0; i < 0x100; i++ ) { _stprintf( g____hex2str + i * 3, _T( "%.2X " ), i ); } //************************************** // HEX转16进制数 // 有空格 //************************************** TCHAR * hex2str( unsigned char *hexdata, size_t length, TCHAR *strbuffer ) { size_t i; TCHAR *p; if( strbuffer ) { *strbuffer = 0; } else { //如果传入一个空串,返回一个错误信息 return g____NULL_STRING; } //查表法 TCHAR *q; //int j; p = strbuffer; for( i = 0; i < length; i++ ) { q = g____hex2str; q += *hexdata; q += *hexdata; q += *hexdata; //j = ( unsigned char )( *hexdata ); //j <<= 1; //j += ( unsigned char )( *hexdata ); memcpy( p, q, 3 * sizeof( TCHAR ) ); p += 3; hexdata++; } *p = 0; } }
俺就自己写过一个方法,快不快俺也不知道。
作者: jennyvenus 发布时间: 2011-12-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28