Page 1 of 1

Structures as a parameter for a thread

Posted: Sat Dec 31, 2005 1:27 pm
by phuckstepp
I'm trying to create a thread and pass through multiple parameters by using a structure and a pointer to the structure, but for some reason the PB compiler reports back:

This variable doesn't have a 'Structure'

Can anyone help? I've put below the relevant snippets from the code.

Code:

Structure at the top of the file

Code: Select all

Structure threadInfo
  dir.l
  folder.s  
EndStructure
Thread creation from a procedure called after a button click

Code: Select all

myThreadData.threadInfo
myThreadData\dir=num(f)
myThreadData\folder=myPath$
myThread(f) = CreateThread(@ThreadProcess(), @myThreadData ) 
The threads main procedure

Code: Select all

Procedure ThreadProcess(*a.threadInfo)

 passedNum=a\dir
 myPath$=a\folder

...

EndProcedure
Thanks for any help
[/code]

Posted: Sat Dec 31, 2005 1:37 pm
by Pupil
you forget to use '*a\...' instead you use 'a\...' which doesn't have a structure. In PB the variables '*a' and 'a' are two different variables.

Posted: Sat Dec 31, 2005 2:21 pm
by phuckstepp
So simple. Thanks

Posted: Sat Dec 31, 2005 5:41 pm
by blueznl
be carefull when using pointers INSIDE structures though...

http://www.xs4all.nl/~bluez/datatalk/pu ... d_pointers

Posted: Mon Jan 02, 2006 5:50 pm
by NoahPhense
Can you post a small working example of that ..

- np

Posted: Mon Jan 02, 2006 7:15 pm
by blueznl
follow the link above, scroll down a little, and look for the section 'pointers in structures', it's a working example

Posted: Mon Jan 02, 2006 7:59 pm
by NoahPhense
No I'm looking for a simple example of threads with
pointers.. Just like above, where he is passing multiple params via
the pointer.

- np

Posted: Mon Jan 02, 2006 8:41 pm
by blueznl
ah, haven't done threads yet in the survival guide, sorry :-)

Posted: Tue Jan 03, 2006 4:36 am
by NoahPhense

Code: Select all

; ok did my own.. and added an array to be passed to the threads

; structure for the array
Structure people
  name.s
  age.l
EndStructure

; the array
Dim emp.people(9) ; 10 people (0-9)

Declare threadedProcedure(*a.people)

; delay between thread launching
dlay.l = 200

; lets load up the array
Gosub loadArray

; core --------------------------------------------------------------
If OpenConsole()

  ; process 9 threads here
  For x = 0 To 8
    CreateThread(@threadedProcedure(), @emp(x)) : Delay(dlay)
  Next x
  
  ; lets keep thread 10 for last
  threadID9 = CreateThread(@threadedProcedure(), @emp(9)) : Delay(dlay)
  WaitThread(threadID9)

  Print("enter..") : enter$ = Input() ; shows over
  CloseConsole()  
EndIf

End

; procedures --------------------------------------------------------
Procedure threadedProcedure(*a.people)
  PrintN(*a\name)
  PrintN(Str(*a\age))
  PrintN("")
EndProcedure

; loadarray ---------------------------------------------------------
loadArray:
  Restore NameData
    For x = 0 To 9
      Read tmpStr.s
      emp(x)\name = tmpStr
    Next x
  Restore AgeData
    For x = 0 To 9
      Read tmpLng.l
      emp(x)\age = tmpLng
    Next x
Return

; datasection -------------------------------------------------------
DataSection
  NameData:
    Data.s "Bob", "Fred", "Mike", "Mark", "Ben", "Daniella", "John"
    Data.s "Curtis", "Alain", "Jorge"
  AgeData:    
    Data.l 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
- np