| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	
	
	
		| Autor | 
		Nachricht | 
	
	
		braesident
 
 
  Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
  | 
		
			
				 Verfasst am: 14.09.2013, 10: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, 13: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, 08: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: 4712 Wohnort: ~/
  | 
		
			
				 Verfasst am: 15.09.2013, 10: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, 13:33    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| ja vielen dank damit geht es super bis jetzt | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		 |