C/C++ 执行时间的显示问题,为啥一步步调试的时候可以显示正确的执行时间,直接运行时就显示为0
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 执行时间的显示问题,为啥一步步调试的时候可以显示正确的执行时间,直接运行时就显示为0相关的知识,希望对你有一定的参考价值。
// time_test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 10
void generate_array(int a[],int size)
for(int i=0;i<N;i++)
a[i]=rand()%10;
int main()
int a[N];
int sum=0;
generate_array(a,N);
clock_t time_start=clock();
clock_t time_end;
for(int i=0;i<N;i++)
sum+=a[i]*a[i];
time_end=clock();
printf("Time:%d\n",time_end-time_start);
return 0;
一步步调试
直接执行
估计你说反了, 你调试的是错误的时间,,直接运行时是正确的时间.
你调试的时候中断了所有时间才辣么长
正常运行那点计算量, 当然不耗时间
你试着用更长的运算量试试, 比如N改为一百万
比如
long long num = 很大的一个数;
while(0!= num)
简单的一些操作;
--num;
不是这个原因,我调过1000000都不行,我调成10是因为为了一步步的调试,for循环的时候执行的少,而且你10的时候可以看到time_start与time_end值是有差值的,clock()记录的时间单位是ms.
追答你这N太大时,a数组开不了啊,建议这种数组放到函数外面开全局,给你把函数去掉了简单化,你试试这个
#include <stdio.h>#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define N 10000000
//int a[N];
//void generate_array(int a[],int size)
//
// for(int i=0;i<N;i++)
//
// a[i]=rand()%10;
//
//
int main()
int sum=0;
//generate_array(a,N);
clock_t time_start=clock();
clock_t time_end;
for(int i=0;i<N;i++)
sum++;
time_end=clock();
cout<<time_end - time_start<<endl;
return 0;
刚刚又试了下,不动你的函数,我把循环控制和函数大小分开,我本地试是可以的
#include <stdio.h>#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define N 10
#define LEN 10000000
void generate_array(int a[],int size)
for(int i=0;i<N;i++)
a[i]=rand()%10;
int main()
int a[N];
int sum=0;
generate_array(a,N);
clock_t time_start=clock();
clock_t time_end;
for(int i=0;i<LEN;i++)
sum+=(a[i%N]*a[i%N])%N;
time_end=clock();
cout<<time_end - time_start<<endl;
return 0;
参考技术C 运行太快了,加入一些耗时的操作应该就有了。
为啥图像未显示在目标 C 的 cellforRowAtIndexPath 中
【中文标题】为啥图像未显示在目标 C 的 cellforRowAtIndexPath 中【英文标题】:Why Image is not Shown in cellforRowAtIndexPath in objective C为什么图像未显示在目标 C 的 cellforRowAtIndexPath 中 【发布时间】:2017-02-07 07:04:22 【问题描述】:我是 iOS 新手,我遇到了关于在 Web 服务的图像视图中显示图像的问题。我正在使用这样的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *STI=@"STI";
NewsTableViewCell *cell = (NewsTableViewCell *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:STI];
if (cell == nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NewsTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
cell.accessoryType=UITableViewCellAccessoryNone;
NSString *strImgURLAsString = [NewsImageArray objectAtIndex:indexPath.row];
[strImgURLAsString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *imgURL = [NSURL URLWithString:strImgURLAsString];
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:imgURL] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
if (!connectionError)
img = [[UIImage alloc] initWithData:data];
if (img==nil)
// img=[UIImage imageNamed:@"userimage.png"];
cell.newsimage.image=img;
// pass the img to your imageview
else
NSLog(@"%@",connectionError);
];
cell.Headlbl.text=[NSString stringWithFormat:@"%@",[headarray objectAtIndex:indexPath.row]];
NSString *aux = [shortnamearray objectAtIndex:indexPath.row];
NSString * htmlString = @"<html><body>";
NSString *htmlString2=@"</body></html>";
NSString * NewString=[NSString stringWithFormat:@"%@%@%@",htmlString,aux,htmlString2];
NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[NewString dataUsingEncoding:NSUnicodeStringEncoding] options:@ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType documentAttributes:nil error:nil];
cell.bodylbl.attributedText=attrStr;
cell.bodylbl.textAlignment=NSTextAlignmentCenter;
cell.bodylbl.textColor=[UIColor whiteColor];
[cell.bodylbl setFont:[UIFont fontWithName:@"Arial" size:16]];
cell.backgroundColor = cell.contentView.backgroundColor;
// cell.bodylbl.text=[NSString stringWithFormat:@"%@",[shortnamearray objectAtIndex:indexPath.row]];
// cell.randrid.text=[NSString stringWithFormat:@"%@",[idarray objectAtIndex:indexPath.row]];
return cell;
图像路径 - http://qaec.teams.in.net/UploadedFiles/TommySchaefer,他在杀戮中所扮演的角色,他为此服务了 18 年.png
http://qaec.teams.in.net/UploadedFiles/Tommy%20Schaefer,%20of%20his%20role%20in%20the%20slaying,%20for%20which%20he%20is%20serving%2018%20year.png
当图像不包含任何间隙时,它显示图像 但是当图像包含任何间隙时,它不会显示图像。如何解决这个问题。提前致谢!
【问题讨论】:
尝试在主线程中设置图像:dispatch_async(dispatch_get_main_queue(), ^ cell.newsimage.image=img; );
请添加不显示的图像画面
@nynohu 不工作。
@Muju 试试这个 cell.newsimage.image=[UIImage imageWithData:data]]
@Muju 你也可以试试SDWebImage,你需要传入url和默认图片,还要先检查数据长度
【参考方案1】:
您可以在 UITableviewCell 类中使用以下方法。在您的情况下,在 NewsTableViewCell.m 中添加代码当创建单元格时,调用 drowRect 方法。因此,在此方法中,您需要设置将图像设置为 YES 的图像视图的 setClipsToBounds 属性。这将解决您的问题。
-(void)drawRect:(CGRect)rect
[super drawRect:rect];
self.profilePicImgView.layer.cornerRadius=self.profilePicImgView.frame.size.width/2;
[self.profilePicImgView setClipsToBounds:YES];
[self.profilePicImgView layoutIfNeeded];
[self.profilePicImgView setNeedsDisplay];
【讨论】:
【参考方案2】:没有必要使用任何其他库等。你的代码在这一行是错误的:
[strImgURLAsString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
看看这个有什么作用?没有。您应该将变量 strImgURLAsString 重新分配给它,然后它应该可以工作:
strImgURLAsString = [strImgURLAsString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
【讨论】:
不行不行。仍然没有显示图像。 这很奇怪,我刚刚在 xcode 中测试过,它可以工作。图片很大,请稍等。 不确定为什么代码在我的 xcode 中有效,而在您的 xcode 中无效。这很奇怪,因为我复制了您的代码并仅修改“strImgURLAsString =”并且它可以工作。 很高兴为您提供帮助。【参考方案3】:为了获得更好的性能,您可以试试这个名为 SDWebImage 的库。
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://qaec.teams.in.net/UploadedFiles/Tommy%20Schaefer,%20of%20his%20role%20in%20the%20slaying,%20for%20which%20he%20is%20serving%2018%20year.png"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
还有 您需要确保已将其写入 plist 文件中
【讨论】:
【参考方案4】:这样使用:
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:imgURL] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
if (!connectionError)
dispatch_async(dispatch_get_main_queue(), ^
img = [[UIImage alloc] initWithData:data];
if (img==nil)
// img=[UIImage imageNamed:@"userimage.png"];
cell.newsimage.image=img;
// pass the img to your imageview
);
else
NSLog(@"%@",connectionError);
];
【讨论】:
【参考方案5】:我知道像您编写的那样在 Imageview 中加载图像 url 以更好地理解过程是个好主意。但是维护缓存也是需要考虑的重要事项。为了获得更好的性能,我建议您使用一个非常好的库,名为 SDWebImage。它的缓存机制可以帮助您更快地加载图像。试试这个。有了这个库,就这么简单。
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
这是另一个。 如果您在应用中使用 AFNetworking,请使用以下代码来执行此操作。
AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"Response: %@", responseObject);
_imageView.image = responseObject;
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Image error: %@", error);
];
[requestOperation start];
【讨论】:
以上是关于C/C++ 执行时间的显示问题,为啥一步步调试的时候可以显示正确的执行时间,直接运行时就显示为0的主要内容,如果未能解决你的问题,请参考以下文章
c++11中,为啥可以用const_iterator删除map/multimap中的元素