무한 루프를 실행하는 간단한 스레드가 있습니다. 결국 루프는 초당 수천 번 USB 포트에서 직렬 데이터를 확인하지만 현재는 매 초마다 NSTextView의 사용자 지정 클래스에 무언가를 씁니다.GUI를 사용한 NSThread 타이밍 문제
int i;
for (i=1; i>0; i++)
{
[lock lock];
[[self textStorage] replaceCharactersInRange:NSMakeRange([[self textStorage] length], 0) withString:@"test\n"];
[lock unlock];
sleep(1);
}
문제는 실제로 산발적으로 기록된다는 것입니다. 그것은 하나 또는 둘을 할 것이고, 10 초를 기다렸다가 한 번에 열을 뱉어 낼 것입니다. 작문 줄을 NSLog(@"test")
으로 바꾸면 좋은 간격으로 기록됩니다. 텍스트 필드에 입력을 받아 들여 텍스트보기에 넣는 주 스레드에 또 다른 테스트 메서드가 있는데, 이렇게하면 자식 스레드의 가장 최근 쓰기를 포함하도록 텍스트보기가 업데이트됩니다. 어쨌든이 시점에서 아무 것도 방해해서는 안됩니다.하지만 확실한 모든 것을 모든 곳에 고정 시켰습니다. 미리 감사드립니다.
잠금 개체 란 무엇입니까? [잠금 잠금]과 [잠금 해제]는 무엇을합니까? – Davyd
잠금 개체는 NSLock의 인스턴스입니다. 서로 다른 두 위치에서 코드를 잠그면 동시에 발생하지 않습니다. 위의 예제에서는 불필요하지만 일반적으로 스레드가 다른 스레드가 사용하는 변수를 수정하거나 읽는 중일 때 사용해야합니다. – Andrew