NSThread blocks interaction

Discussion in 'iOS Programming' started by alvises, Jul 17, 2008.

  1. macrumors newbie

    Jul 15, 2008
    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

    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:

  2. thread starter macrumors newbie

    Jul 15, 2008
    Yea. I have founded a solution. Well , I try to explain with my bad english.

    this is the pseudocode:

    [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:mad:selector(separatedThread:) userInfo:nil repeats:YES];

    NSString *line = [input readlineWithTimeout:0.01];
    if(line == NULL)//timeout

    //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 ?



Share This Page