小编c0d*_*3rz的帖子

根据执行时间分析C++项目

在根据执行时间分析现有代码方面,我需要一些帮助.目的是加快速度.

我已经获得了一些以前工作过的代码.它完全用C++编写,带有OO概念.有一个基于GUI的界面,选择一个选项运行选定的代码.(作为项目的一部分,大约有11个班级).

我希望能够按下GUI选项并让代码运行并生成资源映射,如:

Functions of Class 1 = 20% of execution time
Functions of Class 2 = 60% of execution time
Functions of Class 3 = 10% of execution time
Functions of Class 4 = 10% of execution time
Run Code Online (Sandbox Code Playgroud)

这样,我知道哪个班级占用的时间最多,然后知道哪个班级可以继续工作并改进.但是,我不知道该怎么做.我只有基本的C++知识.

我读过这篇文章:找到c ++执行时间,但是因为程序不是串行的.一个类调用另一个,调用另一个,我不知道系统时钟/滴答是如何实现的?

我读过Valgrind,Zoom,Poor Man's Profiler等程序,但实际上并不知道如何将它与代码集成.有这么简单的方法吗?

我也读过这个方法:如何分析在Linux中运行的C++代码?但是,我不知道如何获得关于基于类的信息的尖锐信息(Class 1,Class 2等)

有人可以建议新手吗?

c++ performance

17
推荐指数
1
解决办法
1万
查看次数

使用GUIDE的Matlab GUI:想要动态更新图形

我编写了一个Matlab脚本,可以使用虚拟COMM端口实时读取数据.我在mfile中完成了大量的信号处理.

接下来,我觉得需要一个紧凑的GUI,将信息显示为摘要.

我最近才开始挖掘和阅读更多Matlab的内置GUI工具GUIDE.我已经按照了一些教程,成功地能够在按下按钮后让我的图形显示在我的GUI上.

但是,我希望GUI能够实时更新.我的数据向量不断更新(从COMM端口读取数据).我希望GUI能够使用更新的数据更新图表,而不是依靠按钮进行更新.有人可以指出我正确的方向进行背景更新吗?

以下是目前GUI的相关代码:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global data
global time

% Time domain plot
axes(handles.timeDomainPlot);
cla;
plot (time, data);
Run Code Online (Sandbox Code Playgroud)

编辑更改代码:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, …
Run Code Online (Sandbox Code Playgroud)

matlab matlab-guide

8
推荐指数
1
解决办法
3万
查看次数

如何读取二进制数据并转换为unsigned char(C++)

我有一个以二进制数据保存的原始图像文件(无编码).我想读取文件并将值转换为unsigned char.但我不知道如何开始这样做.每个文件包含640x480字节.每个像素是8位.

我在这里使用了C++帮助页面:http://www.cplusplus.com/doc/tutorial/files/,但是当我在宣传数据时,它似乎显示了相同的二进制/非人类可读字符.有人可以建议吗?到目前为止,这是我的代码:

    #include <iostream>
    #include <fstream>
    using namespace std;

ifstream::pos_type size;
char * memblock;

int main () {
  ifstream file ("imageData.raw", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);

    cout << "the complete file content is in memory";

    for (int l=0; l<size; l++){
    cout << " memblock[] is = " << (unsigned char)memblock[l] << " index was l = " << l << endl;
    }

    file.close();


    delete[] …
Run Code Online (Sandbox Code Playgroud)

c++ binary-data unsigned-char

6
推荐指数
1
解决办法
1万
查看次数

打印系统时间后防止结束

我有一个简单的问题,如果我想在与系统时间输出相同的行上打印一个值,这可能吗?

char *date;
time_t timer;
timer=time(NULL);
date = asctime(localtime(&timer));
//printf("Current Date: %s", date);


  std::cout << date << ", " << randomNumber  << std::endl;

  if (file.is_open())
  {
    file << date;
    file << ", ";
    file << randomNumber;
    file << "\n";
  }
Run Code Online (Sandbox Code Playgroud)

我希望会发生的是我会将其作为输出:

Wed Jan 16 16:18:56 2013, randomNumber
Run Code Online (Sandbox Code Playgroud)

但我最终得到的文件是:

Wed Jan 16 16:18:56 2013
, randomNumber
Run Code Online (Sandbox Code Playgroud)

另外,我刚做了一个简单的std :: cout,我注意到了同样的结果.似乎系统在输出结束处强制终止线,无论如何,我可以压制这个吗?

c++ systemtime

2
推荐指数
1
解决办法
1598
查看次数

在C中乘以数字时打印的结果不正确

我最近开始使用C,我在简单的算术运算方面遇到了一些问题,只能将两个数相乘.

最初,我尝试将8*2的结果打印到文件中.目前这输出16.接下来,我乘以我真正想要的8*0.000000123456789.这是我的代码:

            fprintf( fp2, "%d\n", (long double)(8*0.000000123456789));
Run Code Online (Sandbox Code Playgroud)

输出到文件的结果是:-1086490624.它确实应该是:0.000000987654312.我故意将算法类型化为长双,以防止任何溢出.没做任何事情并使用:

            fprintf( fp2, "%d\n", (8*0.000000123456789));
Run Code Online (Sandbox Code Playgroud)

收益率1719134127,再次与0.000000987654312的实际值无关

有什么建议吗?

c math

1
推荐指数
2
解决办法
1084
查看次数

将缓冲区/指针设置为null

我试图不断从不同的文件中读取数据到unsigned char*类型的缓冲区.但是,在读取下一个文件之前,我似乎无法将缓冲区设置为NULL.

这里只是相关的代码:

#include <stdio.h>
#include <fstream>


int
 main (int argc, char** argv) { 

     FILE* dataFile = fopen("C:\\File1.txt", "rb");
     unsigned char *buffer = NULL;
     buffer = (unsigned char*)malloc(1000); 
     fread(buffer,1,1000,dataFile);
     fclose(dataFile);

     dataFile = fopen("C:\\File2.txt", "rb");
     buffer = NULL;
     fread(buffer,1,1000,dataFile);
     fclose(dataFile);

     system("pause");
     return 0; 

}
Run Code Online (Sandbox Code Playgroud)

我遇到的错误是在第二次出现这行:fread(buffer,1,1000,dataFile);

我得到的错误是:

调试断言失败!表达式:(缓冲区!= NULL)

它指向fread.c的第147行,基本上是:

/* validation */
_VALIDATE_RETURN((buffer != NULL), EINVAL, 0);
if (stream == NULL || num > (SIZE_MAX / elementSize))
{
    if (bufferSize != SIZE_MAX)
    {
        memset(buffer, _BUFFER_FILL_PATTERN, bufferSize);
    }

    _VALIDATE_RETURN((stream != NULL), …
Run Code Online (Sandbox Code Playgroud)

c++ buffer pointers fread

1
推荐指数
2
解决办法
6243
查看次数