Как эффективно сделать независимые процессы в AppKit? - PullRequest
0 голосов
/ 09 января 2012

Мне сказали: «Элементы управления AppKit не очень удобны для обновления из потоков, отличных от основного потока.»

У меня есть 2 процесса:

- update variables in the heap periodically
- display values from the heap to the display

Я сделалdo:

NSThread *thread_Client = [[NSThread alloc] initWithTarget:self selector:@selector(myTcpClient) object:nil];
NSThread *thread_Display = [[NSThread alloc] initWithTarget:self selector:@selector(displayData) object:nil];

но через некоторое время он отключается или блокируется.

Какой подход лучше?

thx

1 Ответ

0 голосов
/ 09 января 2012

Мне немного неясно, что вы пытаетесь сделать.Похоже, вы пытаетесь выполнить циклическую операцию в фоновом потоке и (в конце каждого цикла) использовать результаты для обновления пользовательского интерфейса.Другие публикации предлагают использовать NSTimer в основном потоке (который является потоком only , который вы должны использовать для обновления пользовательского интерфейса).Вы бы включили таймер время от времени (неоднократно);в обратном вызове, который вызывается при его запуске, вы должны скопировать любые данные / информацию из объектов, которые обновляются фоновым потоком, в соответствующие представления пользовательского интерфейса, а затем вызвать setNeedsDisplay, чтобы вызвать обновление пользовательского интерфейса.Проблема заключается в согласованности используемой вами информации: если фоновый поток продолжает обновлять объект (ы), вы можете скопировать смесь старой и новой информации в пользовательский интерфейс.Возможно, вам нужен объект «доставки», который заполняет фон, а затем передает его в модуль обновления пользовательского интерфейса;такой объект будет содержать согласованный набор информации, получаемый в конце фонового цикла.

В любом случае вы не хотите спать в главном потоке.Все, что он делает, это замедляет ответ пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...