#objective-c
#objective-c
Вопрос:
threadss.h
-----------
#import <Foundation/Foundation.h>
@interface threadss : NSObject {
BOOL m_bRunThread;
int a,b,c;
}
-(void)startThread;
-(void)insert;
-(void)display;
@end
threadss.m
------------
import "threadss.h"
@implementation threadss
-(void)startThread
{
m_bRunThread = YES;
NSOperationQueue* queue = [[NSOperationQueue alloc]init];
//NSInvocationOperation* operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(display) object:nil];
//[queue addOperation:operation];
[[self insert] performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:YES];
[queue release];
//[operation release];
}
-(void)insert
{
NSLog(@"Into The Insert Event!!");
a=10;
b=20;
c = a b;
}
-(void)display
{
NSLog(@"Into the display method");
NSLog(@"The value od c is:%d",c);
}
@end
main.m
-------
#import <Foundation/Foundation.h>
#import "threadss.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
threadss* thread = [[threadss alloc]init];
[thread startThread];
[pool drain];
return 0;
}
error:
------
void value not ignored as it ought to be
Ответ №1:
Ваша проблема возникает отсюда:
[[self insert] performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:YES];
[self insert]
имеет возвращаемый тип void, поэтому вы не можете использовать его в качестве получателя.
Я думаю, вы имели в виду написать:
[self insert];
[self performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:YES];
Комментарии:
1. Я хотел сначала вызвать метод display, а затем я хочу вызвать метод insert. Метод dispaly должен дождаться, пока метод insert выполнит обработку, и он должен сигнализировать потоку отображения по завершении.
2. Если вы сделаете это так, как я написал, вставка будет выполнена в созданном вами потоке, а отображение будет вызвано в основном потоке после завершения вставки. В таком порядке. Поэтому я не вижу причины для обратного вызова.
3. да, делать так, как это легко. и это не выполняет работу параллельно, не так ли.
4. Нет, это не так. Но вы не хотите, чтобы это выполнялось параллельно. В любом случае, я думаю, вам следует задать новый вопрос, если ошибка вас больше не беспокоит. Удачи.
5. Я тоже обеспокоен своими ошибками. Но я не смог прийти к тому, что я хочу получить на выходе, и я сожалею, что я не задал свой вопрос четко. Он работает, когда сделал то, что вы сказали мне сделать. Спасибо.