Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-08-2003, 12:53   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 2
Code asynchron ausführen

Hi,

Ich möchte gern eine Funktion, die eine Suche in einem Text durchführt, parallel ablaufen lassen, so dass nicht alles blockiert ist. Im Moment blockiert die Such-Schleife, so dass der Nutzer keine Eingaben machen kann. Ist es möglich, so etwas wie einen "Thread" zu starten?

Hier der Start der Suche

ActionScript:
  1. search_inputmask.onChanged = function()
  2. {//startet timer, nutzer muss kein button druecken, suche startet automatisch nach 3000ms
  3.        
  4.         if(_global.waitingState == 0 || _global.waitingState == undefined)
  5.         { _global.waitingState = setInterval(sendSearch,300); return; }
  6.        
  7.         if(_global.waitingState != 0)
  8.         { clearInterval(_global.waitingState); _global.waitingState = setInterval(sendSearch,300); }
  9. }
  10.  
  11. function sendSearch()
  12. {//sendet Searchstring zum SearchEngine
  13.         clearInterval(_global.waitingState);
  14.         _global.waitingState = 0;
  15.         var resultSet = mySearchEngine.performSearch(search_inputmask.text); //start the search
  16.         myResultarea.refresh(resultSet);
  17. }

hier eine einfache Version des Such-Loops. Die blockierende Fnkt. ist String.indexof:

ActionScript:
  1. SearchEngine.prototype.performSearch = function(searchString)
  2. {
  3.         ...
  4.         for(var i=0; i<this.textData.length;i++)
  5.         {
  6.                 var toCompare = this.textData[i];
  7.                 var pos=0;
  8.                 if((pos = toCompare.indexOf(searchString))!= -1)
  9.                 {
  10.                         this.resultSet.push(new Array(toCompare,i,pos)
  11.                 }
  12.         }
  13.         ...
  14. }
  15. return this.resultSet;

Danke für jede Hilfe!

Philipp
flashgroove ist offline   Mit Zitat antworten
Alt 24-08-2003, 13:08   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Leider verfügt Flash nicht über Threads, du musst also selbst Hand anlegen. Du könntest die Hauptschleife in deiner Suchfunktion in kleinere Einheiten zerlegen und dann jeweils von einem Interval ausführen lassen.

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 24-08-2003, 13:29   #3 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 2
Dann müsste ich indexOf selber schreiben.. und sicherstellen, dass der Teil-Suchvorgang möglichst kleiner ist als setIntervall.
Das Hauptproblem ist aber, dass ich dadurch sicher enorm an Zeit verliere. Und die Suche braucht bei großen Strings schon so sehr lange ...
flashgroove ist offline   Mit Zitat antworten
Alt 24-08-2003, 13:35   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Zitat:
Dann müsste ich indexOf selber schreiben.. und sicherstellen, dass der Teil-Suchvorgang möglichst kleiner ist als setIntervall.
Nein, braeuchtest du nicht. Das Interval wird dann einfach nicht ausgeführt.

Zitat:
Das Hauptproblem ist aber, dass ich dadurch sicher enorm an Zeit verliere. Und die Suche braucht bei großen Strings schon so sehr lange ...
Das stimmt wohl, schneller wird es auf keinen Fall dadurch.
Zur Beschleunigung könntest du einen Index erzeugen, bei dem du Wortanfänge zusammen mit ihrer Position in einem Objekt speicherst. Scrawer hat mal sowas geschrieben, vielleicht hilft dir die Suche.


mfg r.
bokel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele