Hilfe bin Anfänger^^

08/18/2009 18:58 ●ROBBY●#1
Also ich wollte fragen ob ich zum beispiel in einem script zwei parallel laufende while 1 schleifen haben kann zb. bei metin2 dass er alle 100ms y,space drück dass iss einfach aber dass er dann nach 2min 1 drückt bekomm ich net hin oder mit if dass wenn sich zb. ein pixel verändert dass er dass und dass macht aber bei mir fürt er immer nur die erste schleife aus.
brauch hilfe:(:(:(:(:(:(
08/18/2009 19:37 | Moep |#2
Quote:
Originally Posted by Gigarobin View Post
Also ich wollte fragen ob ich zum beispiel in einem script zwei parallel laufende while 1 schleifen haben kann
Nein!

Quote:
Originally Posted by Gigarobin View Post
bei metin2 dass er alle 100ms y,space drück dass iss einfach aber dass er dann nach 2min 1 drückt
Schau dir dazu mal "TimerInit" und "TimerDiff" in der Hilfe an.

Quote:
Originally Posted by Gigarobin View Post
wenn sich zb. ein pixel verändert dass er dass und dass macht
Guck dir die Beispielscripts der Pixel Funcs in der Hilfe an.

Quote:
Originally Posted by Gigarobin View Post
brauch hilfe:(:(:(:(:(:(
[Only registered and activated users can see links. Click Here To Register...]
08/18/2009 20:27 ●ROBBY●#3
Danke für die Antwort die deutsche hilfe hab ich mir vorhin erst gedownloaded und hab mich damit noch nicht so intensiv befasst.
08/18/2009 20:29 Assass1n#4
Schonmal über Absätze und Satzzeichen nachgedacht?

Wenn ich mir schon deinen Fließtext angucke, will ich nicht sehen, wie dein Code aussieht.

Dein Problem ist schon durch simples Nachdenken zu lösen. Du hast bereits eine Schleife, die alle 100 Millisekunden etwas macht. 2 Minuten = 120 Sekunden = 120.000 Millisekunden. Beim jedem n*1.200ten Durchlauf der 100-Millisekunden-Schleife muss also die 2-Minuten-Aktion ausgelöst werden.

Und dafür braucht man nicht einmal unbedingt einen Timer (auch wenn er vielleicht - aber auch nur vielleicht - die elegantere Lösung darstellt). Nur ein wenig Logik und Basiswissen. Bevor Du also in deiner Signatur groß und breit um Nachsicht bittest, solltest Du entweder mit dem Nachdenken anfangen oder zumindest die Hilfe lesen. Ansonsten machst Du dich nur lächerlich.
08/18/2009 22:29 | Moep |#5
Quote:
Originally Posted by Assass1n View Post
Schonmal über Absätze und Satzzeichen nachgedacht?

Wenn ich mir schon deinen Fließtext angucke, will ich nicht sehen, wie dein Code aussieht.

Dein Problem ist schon durch simples Nachdenken zu lösen. Du hast bereits eine Schleife, die alle 100 Millisekunden etwas macht. 2 Minuten = 120 Sekunden = 120.000 Millisekunden. Beim jedem n*1.200ten Durchlauf der 100-Millisekunden-Schleife muss also die 2-Minuten-Aktion ausgelöst werden.

Und dafür braucht man nicht einmal unbedingt einen Timer (auch wenn er vielleicht - aber auch nur vielleicht - die elegantere Lösung darstellt). Nur ein wenig Logik und Basiswissen. Bevor Du also in deiner Signatur groß und breit um Nachsicht bittest, solltest Du entweder mit dem Nachdenken anfangen oder zumindest die Hilfe lesen. Ansonsten machst Du dich nur lächerlich.
Wenn das Script permanent mit sleeps blockiert wird, dann weiß ich jetzt schon welche Frage daraufhin folgen wird...
08/19/2009 13:09 Xereon#6
Quote:
Originally Posted by Gigarobin View Post
Also ich wollte fragen ob ich zum beispiel in einem script zwei parallel laufende while 1 schleifen haben kann(
Was du meint nennt sich MultiThreading und ist mit einer UDF möglich(siehe Anhang)
08/19/2009 14:59 Syc0n#7
Quote:
Originally Posted by Xereon View Post
Was du meint nennt sich MultiThreading und ist mit einer UDF möglich(siehe Anhang)
Multi Threading ist mit AutoIt nicht möglich!
08/19/2009 15:07 Xereon#8
Quote:
Originally Posted by Syc0n View Post
Multi Threading ist mit AutoIt nicht möglich!
Ja aber eine Art Pseudo Variante.(sieh UDF)
Und mir ist es eigentlich auch recht egal, ob es Pseudo oder nicht Pseudo ist.
08/21/2009 15:44 Shadow992#9
Quote:
Originally Posted by Syc0n View Post
Multi Threading ist mit AutoIt nicht möglich!
Ich finde wenn man wirklich keine Ahnung hat sollte man Leise sein .
Natürlich gibt es für AutoIT Multithreading (ist zwar kein Standart aber mit Dynamic Link Libraries (DLLs) lässt sich alles beheben)

Die von Xereon gepostete UDF ist kein "echtes" Multithreading , erfüllt ihren Zweck aber auch , doch wenn man umbedingt Multithreading haben will , sollte man sich die Kernel32.dll anschauen , dort gibt es folgende Funktion :

Code:
Function CreateRemoteThread

Creates a thread that runs in the virtual address space of another process.

Use the CreateRemoteThreadEx function to create a thread that runs in the virtual address space of another processor and optionally specify extended attributes.
Syntax
C++

HANDLE WINAPI CreateRemoteThread(
  __in   HANDLE hProcess,
  __in   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in   SIZE_T dwStackSize,
  __in   LPTHREAD_START_ROUTINE lpStartAddress,
  __in   LPVOID lpParameter,
  __in   DWORD dwCreationFlags,
  __out  LPDWORD lpThreadId
);

Quelle : http://msdn.microsoft.com/en-us/library/ms682437(VS.85).aspx
So jetzt wird bestimmt die nächste Frage sein : "Warum benutzt dass denn keiner bzw warum gibt es dazu noch keine UDF ? "
Diese Frage lässt sich aber sehr leicht beantworten :
In der Funktion werden gewisse Sachen gefragt bzw benötigt , die sich mir AutoIT nur sehr schwer realisieren/abfragen lassen .

Beispielweise das :
Code:
lpStartAddress [in]

A pointer to the application-defined function of type LPTHREAD_START_ROUTINE to be executed by the thread and represents the starting address of the thread in the remote process. The function must exist in the remote process. For more information, see ThreadProc .
Es ist nicht gerade leicht einen Pointer mit AutoIT zu machen (finde ich)

Zudem kommt , dass wenn jetzt jemand eine UDF daraus machen würde ,dass die meisten einfach viel zu dumm wären das zu verstehen und die , die
es verstehen , sind dann höchstwarscheinlich sowieso schon am lernen von C++/C#/C/Visual Basic ...

Weil (wie ich finde) AutoIT eigentlich nur eine "Übergangssprache" ist , braucht man eigentlich auch kein Multithreading , da das den Einstieg nur unnötig erschweren würde ...