Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 14.09.2013, 11:53 Titel: array an zweiten Thread? |
|
|
Hallo Leute. wie kann ich ein UDT Array an ein Thread übergeben? Mit einem einfachem UDT klappts problemlos, versuch ich es jedoch mit einem Array gibts 2 Fehlermeldungen.
- Illegal specification, at parameter 1 (tf) of FillField() in 'Sub FillField(byval tf() as any ptr)'
- warning 3(1): Passing different pointer types, at parameter 1 of THREADCREATE()
Code: | Screenres 600, 400, 32, , &h10
Type textfeld
X as integer
Y as integer
text as string = ""
stringlaenge as integer = 10000
Laenge as integer = 200
betreff as string = ""
End Type
Dim TF() AS textfeld
Dim As Any Ptr FF_Thread
Dim Shared As Integer terminate_FillField
Dim Shared As Any Ptr MX_FillField
MX_FillField = MutexCreate()
Sub FillField(byval tf() as any ptr)
MutexLock(MX_FillField)
Dim AS String FF_input
MutexUnLock(MX_FillField)
Do ' Dateiname
Sleep 1
MutexLock(MX_FillField)
ScreenLock
locate 1, 40: ? "zweiter Thread"
locate 2, 40: ? Time
ScreenUnlock
FF_Input = Inkey
If terminate_FillField = 1 Then 'abbrechen wenn 1
MutexUnLock(MX_FillField)
Exit Do
End if
MutexUnLock(MX_FillField)
Loop
End Sub
FF_Thread = ThreadCreate(@FillField)
dim as string ffinp
Do
Sleep 1
MutexLock(MX_FillField)
Screenlock
locate 1, 1: ? "erster Thread"
locate 2, 1: ? Time
Screenunlock
ffinp = inkey
MutexUnLock(MX_FillField)
if ffinp = Chr(27) then
MutexLock(MX_FillField): terminate_FillField = 1: MutexUnLock(MX_FillField)
ThreadWait(FF_Thread) 'warten bis FF_Thread endet
MutexDestroy (MX_FillField)
Exit Do
End If
Loop
|
|
|
Nach oben |
|
 |
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 14.09.2013, 14:01 Titel: |
|
|
Lass mal die Klammer beim Parameter "tf" weg:
Code: |
Sub FillField(byval tf as any ptr)
|
|
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 15.09.2013, 09:54 Titel: |
|
|
erstmal danke, also wenn ich die klammern weg lasse dann startet das program ohne Fehlermeldung, aber nur solang ich nicht versuche aus der Sub darauf zuzugreifen.
Ich habe den code so geändert:
- vor der Sub TF auf 1 erhöht.
- in TF(1) infos eingetragen
- und in der Sub soll TF(1).betreff angezeigt werden
doch bei letzterem heist es das das Array TF nicht Dimensioniert wurde, was mir ja auch irgendwie logisch erscheint da meines wissens TF ohne Klammern ja kein array sondern eine einfache Variable ist. oder ?
Code: | Screenres 600, 400, 32, , &h10
Type textfeld
X as integer
Y as integer
text as string = ""
stringlaenge as integer = 10000
Laenge as integer = 200
betreff as string = ""
End Type
Dim Shared TF() AS textfeld
ReDim PreServe Shared TF(UBound(TF)+1)
TF(UBound(TF)).X = 10: TF(UBound(TF)).Y = 10: TF(UBound(TF)).stringlaenge = 80
TF(UBound(TF)).betreff = "tag": TF(UBound(TF)).text = "hello": TF(UBound(TF)).laenge = 75
Dim As Any Ptr FF_Thread
Dim Shared As Integer terminate_FillField
Dim Shared As Any Ptr MX_FillField
MX_FillField = MutexCreate()
Sub FillField(byval tf as any ptr)
MutexLock(MX_FillField)
Dim AS String FF_input
MutexUnLock(MX_FillField)
Do ' Dateiname
Sleep 1
MutexLock(MX_FillField)
ScreenLock
locate 1, 40: ? "second Thread"
locate 2, 40: ? Time
locate 3, 40: ? TF(1).betreff
ScreenUnlock
FF_Input = Inkey
If terminate_FillField = 1 Then 'abbrechen wenn 1
MutexUnLock(MX_FillField)
Exit Do
End if
MutexUnLock(MX_FillField)
Loop
End Sub
FF_Thread = ThreadCreate(@FillField)
dim as string ffinp
Do
Sleep 1
MutexLock(MX_FillField)
Screenlock
locate 1, 1: ? "first Thread"
locate 2, 1: ? Time
Screenunlock
ffinp = inkey
MutexUnLock(MX_FillField)
if ffinp = Chr(27) then
MutexLock(MX_FillField): terminate_FillField = 1: MutexUnLock(MX_FillField)
ThreadWait(FF_Thread) 'warten bis MyThread endet
MutexDestroy (MX_FillField)
Exit Do
End If
Loop
|
jetzt hab ich noch folgendes versucht
Code: | Sub FillField(byval code as textfeld) |
für mich hier unverständlich muss in der Sub der aufruf trotzdem TF(1).betreff bleiben und nicht CODE(1).betreff
Das Program scheint zu laufen. Es gibt dann aber trotzdem zwei dinge die mich stören.
- Programabbruch mit ESC funktioniert nicht gleich
- Compiler gibt Warnung aus: Passing different Pointer types, at Parameter 1 of ThreadCreate |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 15.09.2013, 11:24 Titel: |
|
|
TF ist (notwendigerweise) ein Pointer, in diesem Fall ein Pointer auf ein Array. Daher musst du auch entsprechend einen Pointerzugriff machen.
Vielleicht wäre THREADCALL für deine Zwecke leichter zu handhaben. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 15.09.2013, 14:33 Titel: |
|
|
ja vielen dank damit geht es super bis jetzt |
|
Nach oben |
|
 |
|