2011-04-24, 21:38
#1
Jag har de senaste dagarna lekt med nya Xcode men har stött på problem med en uppgift där jag vill lista de processer som körs. Sprang på denna kod men har problem att implementera detta i min app.
Jag kör en View-based application och vill visa processerna i en label (eller liknande) men hur ska jag deklarera arrayen så den får värdet av metoden?
.h
.m
(Har läst C och JAVA)
Tack för hjälp!
/J
Jag kör en View-based application och vill visa processerna i en label (eller liknande) men hur ska jag deklarera arrayen så den får värdet av metoden?
.h
Kod:
#import <UIKit/UIKit.h>
@interface processesViewController : UIViewController {
UILabel *textlabel1;
UILabel *textlabel2;
UISwitch *switch1;
}
@property(nonatomic,retain) IBOutlet UILabel *textlabel1;
@property(nonatomic,retain) IBOutlet UILabel *textlabel2;
@property(nonatomic,retain) IBOutlet UISwitch *switch1;
-(IBAction)changetext;
-(NSArray *)runningProcesses;
@end
.m
Kod:
#import "processesViewController.h"
#import <sys/sysctl.h>
@implementation processesViewController
@synthesize textlabel1;
@synthesize textlabel2;
@synthesize switch1;
- (void)dealloc
{
[super dealloc];
[textlabel1 release];
[switch1 release];
}
-(IBAction)changetext
{
//här vill jag att textlabel2 ska lista processerna
}
-(NSArray *)runningProcesses {
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
size_t miblen = 4;
size_t size;
int st = sysctl(mib, miblen, NULL, &size, NULL, 0);
struct kinfo_proc * process = NULL;
struct kinfo_proc * newprocess = NULL;
do {
size += size / 10;
newprocess = realloc(process, size);
if (!newprocess){
if (process){
free(process);
}
return nil;
}
process = newprocess;
st = sysctl(mib, miblen, process, &size, NULL, 0);
} while (st == -1 && errno == ENOMEM);
if (st == 0){
if (size % sizeof(struct kinfo_proc) == 0){
int nprocess = size / sizeof(struct kinfo_proc);
if (nprocess){
NSMutableArray * array = [[NSMutableArray alloc] init];
for (int i = nprocess - 1; i >= 0; i--){
NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid];
NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm];
NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName, nil]
forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName", nil]];
[processID release];
[processName release];
[array addObject:dict];
[dict release];
}
free(process);
return [array autorelease];
}
}
}
return nil;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
(Har läst C och JAVA)
Tack för hjälp!
/J