Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

alvises

macrumors newbie
Original poster
Jul 15, 2008
10
0
Well, about uiview update and nsthread: I want to do an example to show better the BIG problem:

I start a thread with

[NSThread detachNewThreadSelector:mad:selector(mainloop:) toTarget:self withObject:nil];

This "mainloop" method is like

-(void)mainloop:(id)object{
while(YES){
NSString *line = [stream readLine];
//console is UITextView object
console.text = line;
}
}

Well, when I start the thread the application continues to work. When i receive the first line (and then when the thread modify for the first time a object of the GUI) the USER interaction is BLOCKED. All the GUI (bottons, tables, not only "console textview") is refreshed ONLY every while loop and (when i receive another line) and then if I want to see the update i have to wait the next line........:mad:
Why ?
I'm getting crazy with this problem.:eek:
Thanks.

Alvise
 

alvises

macrumors newbie
Original poster
Jul 15, 2008
10
0
Yea. I have founded a solution. Well , I try to explain with my bad english.

this is the pseudocode:

-(IBAction)methodInMainThread:(id)button{
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:mad:selector(separatedThread:) userInfo:nil repeats:YES];
}

-(void)separatedThread:(NSTimer*)timer{
NSString *line = [input readlineWithTimeout:0.01];
if(line == NULL)//timeout
return;

//process the string
}


In this case i write the code of a "readLineWithTimeout:" method. This method waits for a input for 0.01 seconds, after that returns and the gui will be updated.
The POSIX function to use to "select" the input and know if it goes in timeout is "select()" function -> "man select".

I don't know if is the best way to resolv the problem.... a thread looping every 10 millisecs is not the best way i think.... but it works!
Any comment ?

Thanks.

Alvise
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.