Du bist nicht angemeldet.

21

Sonntag, 25. Juli 2010, 23:11

Leute ihr dürft weiter spekulieren, um welche Daten es sich handelt (das bleibt mein Geheimnis^^).
Spotlight ist übrigens ein sehr gutes Beispiel. So wie in Spotlight soll meine Suche implementiert sein.
Die ganzen anderen Sachen, die jetzt genannt wurden, schau ich mir morgen mal an, ich brauch jetzt erstmal Schlaf^^.

22

Montag, 26. Juli 2010, 00:54

Sonst säuft Hamburg ab :D

Glaub ja nicht, dass ich das nicht lese!

+hrhr+
DAS möchte ich aber erleben, dass wir hier absaufen.
This post is optimized for Safari and Mozilla...use IE if you must...and suffer...

C/C++-Quelltext

1
[[[User withNick:@"Lucas de Vil"] numberOfPosts] increaseByOne];

Beiträge: 15 192

Wohnort: Köln

Beruf: Rechtsanwalt

Hobbys: FSK18

  • Private Nachricht senden

23

Montag, 26. Juli 2010, 07:25

Alkohol im Spiel?


Gerade ne Caipi gemacht! Aber noch beim dritten Schluck.

Dir ist klar das die SQL abfrage SELECT * FROM bla WHERE x = "a*"... dir erst alle Ergebnisse raussucht und dir nicht mal bei 10, 100, 1000 ein Callback schickt, womit du dann aus deinem Thread heraus mal ein Update schicken könntest.

Abgesehen davon, dass dies nichts daran ändert, dass die Nutzereingabe nicht blockiert, ist dir doch klar, dass ich die Ergebnismenge begrenzen kann.
Es hat noch nie etwas gefunzt. Das Buch erscheint zwei Tage, bevor es an dich geliefert wird. To tear down the Wall would be a Werror!

24

Montag, 26. Juli 2010, 15:05

Also wie ich dass jetzt so rausgelesen habe, hatte Amin die beste Idee und ich stürze mich jetzt mal auf die NSThread Class Reference. Ist doch der beste Ansatz, oder gibt es da schon noch weiter vorgekaute Lösungen in Cocoa touch? (ich hab in der Suche iwas von ner spotlight.h gelesen)?


Btw:
Alkohol im Spiel?


Gerade ne Caipi gemacht! Aber noch beim dritten Schluck.

Dir ist klar das die SQL abfrage SELECT * FROM bla WHERE x = "a*"... dir erst alle Ergebnisse raussucht und dir nicht mal bei 10, 100, 1000 ein Callback schickt, womit du dann aus deinem Thread heraus mal ein Update schicken könntest.

Wird nicht die query Schritt für Schritt, eine Zeile nach der anderen, vorsichtig und bedächtig, durchgearbeitet? Und zwar mit sqlite3_step() ?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DrUeSBe« (26. Juli 2010, 15:12)


25

Montag, 26. Juli 2010, 21:29

Hui, da steckt ja ganz schön was hinter.
Damit ich mir einige Stunden sparen kann, könntet ihr mir vllt helfen? Zumindest das simpelste Grundgerüst für nen Thread mit RunLoop hier hin coden (der Thread sollte nen NSString empfangen können)?

Ich mach schonmal nen Anfang, den ihr dann evtl erweitern oder korrigieren könnt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-(void)viewDidLoad
{
	NSThread* searchThread = [[NSThread alloc] initWithTarget:self selector:@selector(searchThreadMainRoutine) object:nil];
	[searchThread start];
	//...
}

-(void)searchThreadMainRoutine
{
	NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
	NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
	//...

	[pool Autorelease];
}


Es wäre wirklich toll wenn ich von euch da nen Anstoß (oder gleich ne Fertige Lösung^^) bekommen könnte.
Ich mach derweil erstmal an andern Ecken meines "Großprojektes" weiter :rolleyes: .

Beiträge: 15 192

Wohnort: Köln

Beruf: Rechtsanwalt

Hobbys: FSK18

  • Private Nachricht senden

26

Montag, 26. Juli 2010, 22:25

Ich glaube nicht, dass du eine Run-Loop benötigst. Du startest einen Thread mit dem Suchmuster. Der liefert dann zwischendurch immer die Daten.

Gibt der Benutzer ein neues Zeichen ein, kannst du das entweder dem Thread mitteilen oder – schent mir zumindest in erster Näherung und ohne Optimierung praktischer – startest einen neuen Thread.

Bedenke, dass es keine Rolle spielt, wie langsam das Ding bei 20, 30 Einträgen wird. Denn in diesem Falle wird der Benutzer ohnehin eher einen weiteren Buchstaben tippen anstatt die Liste zu durchsuchen. Du machst bei Spotlight ja auch selten "Alle Ergebnisse anzeigen".

In einer weiteren Optimierung könnte der ursprüngiche Thread seine bisherigen Ergebnisse mit dem neuen zusätzlichen Buchstaben filtern. Wie gesagt: Es können ja eigentlich keine dazukommen.
Es hat noch nie etwas gefunzt. Das Buch erscheint zwei Tage, bevor es an dich geliefert wird. To tear down the Wall would be a Werror!

27

Montag, 26. Juli 2010, 22:53

In einer weiteren Optimierung könnte der ursprüngiche Thread seine bisherigen Ergebnisse mit dem neuen zusätzlichen Buchstaben filtern. Wie gesagt: Es können ja eigentlich keine dazukommen.

Tippfehler passieren. Dann wäre die nächste logische Eingabe ein Backspace.
This post is optimized for Safari and Mozilla...use IE if you must...and suffer...

C/C++-Quelltext

1
[[[User withNick:@"Lucas de Vil"] numberOfPosts] increaseByOne];

Beiträge: 15 192

Wohnort: Köln

Beruf: Rechtsanwalt

Hobbys: FSK18

  • Private Nachricht senden

28

Dienstag, 27. Juli 2010, 00:10

In einer weiteren Optimierung könnte der ursprüngiche Thread seine bisherigen Ergebnisse mit dem neuen zusätzlichen Buchstaben filtern. Wie gesagt: Es können ja eigentlich keine dazukommen.

Tippfehler passieren. Dann wäre die nächste logische Eingabe ein Backspace.

Dann startet er eben wieder eine Stufe vorher.

Mal Spotlight ausprobiert?
Es hat noch nie etwas gefunzt. Das Buch erscheint zwei Tage, bevor es an dich geliefert wird. To tear down the Wall would be a Werror!

29

Samstag, 31. Juli 2010, 01:48

Ich möchte das hier nochmal pushen.

Ich habe jetzt ein bisschen dazu gelesen und es scheint kein Weg an einer eigenen NSRunLoop vorbeizuführen.
Also frag ich jetzt halt doch nochmal: Wie richte ich mir sauber einen neuen Thread mit eigener NSRunLoop ein?

30

Samstag, 31. Juli 2010, 13:45

Ich habe jetzt ein bisschen dazu gelesen und es scheint kein Weg an einer eigenen NSRunLoop vorbeizuführen.
NSThread und NSRunLoop habe ich einmal zusammen gebraucht, da ich einen NSTimer ausgelagert habe. Für was benötigst Du die RunLoop?

31

Samstag, 14. August 2010, 13:43

Jap, ihr lagt doch richtig.

Habe anfangs noch versucht, bei jedem Aufruf von ...textDidChange: die langwierige Abfrage immer wieder erneut in einem Hintergrundthread ablaufen zu lassen, ohne darauf zu achten, ob der vorherige Hintergrundthread schon fertig war. Das führte sehr häufig zum Absturz.

Jetzt habe ich mir einen Timer im MainThread eingerichtet, der jedes mal schön sauber prüft, ob der Sekundärthread auch schon fertig ist (isFinished) und erst dann einen neuen Sekundärthread erlaubt.
Funktioniert absolut flüssig und ohne Abstürze (von wenigen Ausnahmen abgesehen, die möglicherweise aber auch anderweitig verursacht wurden).

Muchas Gracias Seniores!