Threaded B3D / BPlus

Übersicht BlitzBasic DLLs und Userlibs

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Xaymar

ehemals "Cgamer"

Betreff: Threaded B3D / BPlus

BeitragDo, Nov 05, 2009 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
(Ich habe mir erlaubt einen neuen Thread hierfür zu erstellen)

Threaded BB ist nun komplett funktionsfähig.
Die Userlib funktioniert bei richtiger Benutzung perfekt.
Beispiele werden noch folgen.

ThreadedBB funktioniert nur auf Betriebssystemen älter als Vista und neuere als 2000

Vielen Dank an Silver_Knee für die Idee.
Benötigt wird die Funktionszeiger Lib von Noobody

ThreadedBB.decls
Code: [AUSKLAPPEN]
.lib "Kernel32.dll"

CreateMutex%( lpMutexAttributes*, bInitialOwner%, lpName$ ) : "CreateMutexA"
OpenMutex%( dwDesiredAccess%, bInheritHandle%, lpName$ ) : "OpenMutexA"
ReleaseMutex%( hMutex% ) : "ReleaseMutex"

CreateThread%( lpThreadAttributes*, dwStackSize%, lpStartAddress%, lpParameter%, dwCreationFlags%, lpThreadId% ) : "CreateThread"
GetExitCodeThread%( hThread% ) : "GetExitCodeThread"
TerminateThread%( hThread%, dwExitCode% ) : "TerminateThread"
ExitThread%( dwExitCode% ) : "ExitThread"

WaitForSingleObject%( hHandle%, dwMilliseconds% ) : "WaitForSingleObject"
WaitForMultipleObjects%( nCount%, lpHandles*, bWaitAll%, dwMilliseconds% ) : "WaitForMultipleObjects"

CloseHandle%( hObject% ) : "CloseHandle"

GetLastError%( ) : "GetLastError"
FormatMessage$( dwFlags%, lpSource*, dwMessageId%, dwLanguageId%, lpBuffer$, nSize%, Arguments*) : "FormatMessage"

ExitProcess( uExitCode% ) : "ExitProcess"

.lib " "
BB_CreateMutex%( Name$ )
BB_OpenMutex%( Name$, Inherit%, RequireFull% )
BB_ReleaseMutex%( hMutex% )
BB_WaitForMutex%( hMutex%, TimeOut% )
BB_WaitForMutexes%( TimeOut%, WaitForAll% )
BB_WaitForMutexes_Add%( hMutex% )

BB_CreateThread%( hPointer% )
BB_CloseThread%( hThread% )


ThreadedBB.bb
BlitzBasic: [AUSKLAPPEN]
;Constants
Const WAIT_OBJECT_0 = $00000080
Const WAIT_ABANDONED = $00000000
Const WAIT_TIMEOUT = $00000102
Const WAIT_FAILED = $FFFFFFFF

;Types - Used by Windows
Type SECURITY_ATTRIBUTES
Field nLength
Field lpSecurityDescriptor.SECURITY_ATTRIBUTES
Field bInheritHandle
End Type

;Types - Used by Functions
Global MutexCount = 0
Type MutexList
Field hMutex
End Type

;Functions - Mutex
Function BB_CreateMutex( Name$="" )
Local SA.SECURITY_ATTRIBUTES

SA = New SECURITY_ATTRIBUTES
SA\nLength = 8
SA\lpSecurityDescriptor = Null ;No Security
SA\bInheritHandle = 0 ;No Childs

Mutex = CreateMutex( SA, False, Name$ )

If Mutex = 0
Return 0
EndIf

Return Mutex
End Function

Function BB_OpenMutex( Name$, Inherit=False, RequireFull=False )
Local SA.SECURITY_ATTRIBUTES

If RequireFull = False
Mutex = OpenMutex( 0, Inherit, Name )
Else
;MSDN:
;MUTEX_ALL_ACCESS (0x1F0001)
;All possible access rights for a mutex object.
;Use this right only if your application requires access beyond that granted by the standard access rights.
;Using this access right increases the possibility that your application must be run by an Administrator.
Mutex = OpenMutex( $1F0001, Inherit, Name )
EndIf
Return Mutex
End Function

Function BB_ReleaseMutex( hMutex )
ReleaseMutex( hMutex )
End Function

Function BB_WaitForMutex( hMutex, TimeOut=1000 )
Return WaitForSingleObject( hMutex, TimeOut )
End Function

Function BB_WaitForMutexes( TimeOut=1000, WaitForAll=True )
Local Bank = CreateBank(MutexCount*4), Count = 0
Local ML.MutexList
For ML = Each MutexList
PokeInt Bank, Count*4, ML\hMutex
Count = Count + 1
Next
Delete Each MutexList

Status = WaitForMultipleObjects( MutexCount , Bank, WaitForAll, TimeOut )
FreeBank Bank

Return Status
End Function

Function BB_WaitForMutexes_Add( hMutex )
Local ML.MutexList
If hMutex <> 0
ML = New MutexList
ML\hMutex = hMutex

MutexCount = MutexCount + 1

Return 1
EndIf
Return 0
End Function

;Functions - Thread
Function BB_CreateThread(hPointer%)
Local SA.SECURITY_ATTRIBUTES

SA = New SECURITY_ATTRIBUTES
SA\nLength = 8
SA\lpSecurityDescriptor = Null ;No Security
SA\bInheritHandle = 0 ;No Childs

Local Bank = CreateBank()

Thread = CreateThread( SA, 0, hPointer, Bank, $0001, Bank)

Delete SA
Return Thread
End Function

Function BB_CloseThread( hThread )
Status = TerminateThread( hThread, GetExitCodeThread( hThread ) )
Return Status
End Function

;Functions - Error
Function BB_CheckError() ;Returns MAV-.- use "If GetLastError() Not 0" instead
Local Error = GetLastError()
If Error <> 0
Bank = CreateBank(1024)
FormatMessage($000010FF, 0, Error, $0, Stra$, 1000, 0)

StrI$ = ""
For Cur = 0 To 1023
Byte = PeekByte(Bank, Cur)
If Byte > 0
StrI = StrI + Chr(Byte)
Else
Exit
EndIf
Next

RuntimeError StrI
EndIf
End Function


Threads:
Ich empfehle Folgende Struktur für Threads:
BlitzBasic: [AUSKLAPPEN]
Local lblFunctionName
tmp = GetInstructionPointer()
If ProgInit = 1
lblFunctionName = tmp
Else
;Thread Code hier
ExitThread(Rueckgabe) ;Die Rückgabe kann mit GetExitCodeThread( hThread ) geholt werden
EndIf

ProgInit muss nach dem Initialisieren der Thread Codes auf 0 setzen, damit der Code ausgeführt wird.

Um einen Thread zu erstellen verwenden wir
BlitzBasic: [AUSKLAPPEN]
hThreadName = BB_CreateThread( lblFunctionName )

Dieser Thread läuft nun nebenbei und zieht ressourcen sofern der Mutex frei ist, bzw kein Mutex exestiert.
Um diesen Thread nun zu entfernen verwenden wir
BlitzBasic: [AUSKLAPPEN]
CloseHandle(hThreadName):BB_CloseThread(hThreadName)


Mutex:
Mutex eigenen sich perfekt für das warten lassen von Threads
Um einen Thread warten zu lassen, bis ein anderer fertig ist müsst ihr vor allen BB_CreateThread( .. ) einen Mutex erstellt haben, ungefähr so:
BlitzBasic: [AUSKLAPPEN]
hMutexName = BB_CreateMutex()

Damit ein Thread nun wartet und prüft ob dieser verfügbar ist muss folgendes gemacht werden:
BlitzBasic: [AUSKLAPPEN]
WaitResult = BB_WaitForMutex( hMutexName )
Select WaitResult
Case WAIT_OBJECT_0 ;Mutex kann nun benutzt werden
;Thread Code
BB_ReleaseMutex( hMutexName )
Case WAIT_ABANDONED ;Mutex hat kein Parent und wurde abgesetzt
;Fehler Code
Case WAIT_TIMEOUT ;Mutex Waiting ist nicht erfolgreich gewesen
;Fehler Code
Case WAIT_FAILED ;Mutex exestiert nicht
;Fehler Code
End Select



Beschreibung aller Befehle:
BB_CreateMutex( [Name] )
Arrow Erstellt einen neuen Mutex.
BB_OpenMutex( Name[, Inherit, RequireFull] )
Arrow Öffnet einen bestehenden Mutex aus einem anderen Programm.
BB_ReleaseMutex( hMutex )
Arrow Gibt einen Mutex wieder für andere Threads frei. Um den Mutex zu löschen diesen Befehl mit CloseHandle() verwenden!
BB_WaitForMutex( hMutex[, TimeOut] )
Arrow Wartet darauf das ein Mutex wieder verfügbar wird. Sofern dieser verfügbar ist, ist der Mutex automatisch belegt und muss mit BB_ReleaseMutex() freigegeben werden.
BB_WaitForMutexes( [TimeOut, WaitForAll] )
Arrow Spezielle Funktion um auf mehrere Mutexe gleichzeitig zu warten. Leert zugleich die WaitForMutexes Liste.
BB_WaitForMutexes_Add( hMutex )
Arrow Fügt einen Mutex zur WaitForMutexes Liste hinzu.
BB_CreateThread( pPointer )
Arrow Erstellt einen neuen Thread.
BB_CloseThread( hThread )
Arrow Terminiert einen Thread. Nur in kombination mit CloseHandle() verwenden!
ExitThread( ExitCode )
Arrow Verwenden um die Threadausführung zu stoppen und ExitCode zurück zuliefern. Ähnlich wie Return in einer Funktion
ExitProcess( ExitCode )
Arrow Beendet euer Programm mit ExitCode als Ausgabe. Unbedingt anstatt End verwenden
GetExitCodeThread( hThread )
Arrow Benutzt dies um den zurückgelieferten Integer aus einem Thread zu holen. Nützlich um zu prüfen ob ein Thread fertig ist und man nun auf Variablen zugreifen darf/kann.

Viel Spaß mit einem (bei mir zumindest nicht crashenden) Threaded BB Smile
Warbseite
  • Zuletzt bearbeitet von Xaymar am Mi, Nov 11, 2009 23:18, insgesamt einmal bearbeitet

Silver_Knee

BeitragDo, Nov 05, 2009 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht genau ob das sinnvoll ist mit einem weiteren Thread dafür von mir aus kann man beides irgendwie zusammenfügen...

Außerdem hast du immer noch kein Beispiel angegeben und die ganzen Einschränkungen, die ich am Anfang geschrieben habe gelten auch noch.

Xaymar

ehemals "Cgamer"

BeitragDo, Nov 05, 2009 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit gleichzeitigem auf eine Variable zugreifen?
Nein funktioniert nun ohne Probleme. Nur schreiben/schreiben darf man nicht. Lesen/schreiben ist ok

Lokale Variablen gehen auch

Grafikbuffer ist so ein Ding. es können mehrere Threads gleichzeitig darauf zugreifen und zeichnen nur das flip muss in der Mainschleife(Außerhalb der Threads) stehen.

Die Fehlermeldung auf dem "X" lässt sich unterdrücken, arbeite ich auch schon dran
Warbseite

ozzi789

BeitragDo, Nov 05, 2009 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön Smile
aber auch lob an Silver_Knee!


werde schauen ob ich threaded b+ für mein Projekt TBP einsetzen kann ^^
mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Silver_Knee

BeitragDo, Nov 05, 2009 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
sind die lokalen also benutzbar? ok.

Xaymar

ehemals "Cgamer"

BeitragDo, Nov 05, 2009 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir gabs keine Probleme damit. Also denke ich mal das es bei euch auch funktioniert
Warbseite

Xaymar

ehemals "Cgamer"

BeitragMi, Nov 11, 2009 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ThreadedBB funktioniert nur auf Betriebssystemen älter als Vista und neuere als 2000

Habe es auf Windows 7 und Vista getestet. Crasht schon beim initialisieren der decls, da die Parameter wohl geändert wurden oder die Funktionen entfernt.

Notiz in den ersten beitrag habe ich eingefügt.

Zusätzlich kann ich daran nciht mehr weiterarbeiten da ich nun Windows 7 habe.

Letzte Sources:

ThreadedBB.decls
Code: [AUSKLAPPEN]
.lib "Kernel32.dll"

CreateMutex%( lpMutexAttributes*, bInitialOwner%, lpName$ ) : "CreateMutexA"
OpenMutex%( dwDesiredAccess%, bInheritHandle%, lpName$ ) : "OpenMutexA"
ReleaseMutex%( hMutex% ) : "ReleaseMutex"

CreateThread%( lpThreadAttributes*, dwStackSize%, lpStartAddress%, lpParameter%, dwCreationFlags%, lpThreadId% ) : "CreateThread"
GetExitCodeThread%( hThread% ) : "GetExitCodeThread"
SuspendThread%( hThread% ) : "SuspendThread"
ResumeThread%( hThread% ) : "ResumeThread"
TerminateThread%( hThread%, dwExitCode% ) : "TerminateThread"
ExitThread%( dwExitCode% ) : "ExitThread"

WaitForSingleObject%( hHandle%, dwMilliseconds% ) : "WaitForSingleObject"
WaitForMultipleObjects%( nCount%, lpHandles*, bWaitAll%, dwMilliseconds% ) : "WaitForMultipleObjects"

CloseHandle%( hObject% ) : "CloseHandle"

GetLastError%( ) : "GetLastError"
FormatMessage$( dwFlags%, lpSource*, dwMessageId%, dwLanguageId%, lpBuffer$, nSize%, Arguments*) : "FormatMessage"

ExitProcess( uExitCode% ) : "ExitProcess"

.lib "user32.dll"
FindWindow%( lpClassName$, lpWindowName$ ) : "FindWindowA"
PeekMessage%( lpMsg*, hWnd%, wMsgFilerMin%, wMsgFilerMax%, wRemoveMsg% ) : "PeekMessageA"
DispatchMessage%( lpMsg* ) : "DispatchMessageA"

.lib " "
BB_CreateMutex%( Name$, ID% )
BB_OpenMutex%( Name$, Inherit%, RequireFull% )
BB_KillMutex%( hMutex% )
BB_LockMutex%( hMutex% )
BB_UnLockMutex%( hMutex% )
BB_CloseMutex%( hMutex% )

BB_WaitForMutex%( hMutex%, TimeOut% )
BB_WaitForMutexes%( TimeOut%, WaitForAll% )
BB_WaitForMutexes_Add%( hMutex% )

BB_CreateThread%( hPointer% )
BB_PauseThread%( hThread% )
BB_UnpauseThread%( hThread% )
BB_KillThread%( hThread% )
BB_CloseThread%( hThread% )


ThreadedBB.bb
Code: [AUSKLAPPEN]
;Constants
Const WAIT_OBJECT_0 = $00000080
Const WAIT_ABANDONED = $00000000
Const WAIT_TIMEOUT = $00000102
Const WAIT_FAILED = $FFFFFFFF

Const PM_NOREMOVE = $0
Const PM_REMOVE = $1


;Types - Used by Windows
Type SECURITY_ATTRIBUTES
   Field nLength
   Field lpSecurityDescriptor.SECURITY_ATTRIBUTES
   Field bInheritHandle
End Type

Type MSG
   Field hwnd
   Field message
   Field wParam
   Field lParam
   Field time
   Field pt
End Type

;Types - Used by Functions
Global MutexCount = 0
Type MutexList
   Field hMutex
End Type

;Functions - Mutex
Function BB_CreateMutex( Name$="" )
   Local SA.SECURITY_ATTRIBUTES
   
   SA = New SECURITY_ATTRIBUTES
   SA\nLength = 8
   SA\lpSecurityDescriptor = Null      ;No Security
   SA\bInheritHandle = 0         ;No Childs
   
   Mutex = CreateMutex( SA, False, Name$ )
   
   If Mutex = 0
      Return 0
   EndIf
   
   Return Mutex
End Function

Function BB_OpenMutex( Name$, Inherit=False, RequireFull=False )
   Local SA.SECURITY_ATTRIBUTES
   
   If RequireFull = False
      Mutex = OpenMutex( 0, Inherit, Name )
   Else
      ;MSDN:
      ;MUTEX_ALL_ACCESS (0x1F0001)
      ;All possible access rights for a mutex object.
      ;Use this right only if your application requires access beyond that granted by the standard access rights.
      ;Using this access right increases the possibility that your application must be run by an Administrator.
      Mutex = OpenMutex( $1F0001, Inherit, Name )
   EndIf
   Return Mutex
End Function

Function BB_LockMutex( hMutex )
   Return BB_WaitForMutex( hMutex, $FFFFFFFF )
End Function

Function BB_UnLockMutex( hMutex )
   Return BB_KillMutex( hMutex )
End Function

Function BB_KillMutex( hMutex )
   Return ReleaseMutex( hMutex )
End Function

Function BB_CloseMutex( hMutex )
   CloseHandle( hThread )
   Return BB_KillMutex( hMutex )
End Function

Function BB_WaitForMutex( hMutex, TimeOut=1000 )
   Return WaitForSingleObject( hMutex, TimeOut )
End Function

Function BB_WaitForMutexes( TimeOut=1000, WaitForAll=True )
   Local Bank = CreateBank(MutexCount*4), Count = 0
   Local ML.MutexList
   For ML = Each MutexList
      PokeInt Bank, Count*4, ML\hMutex
      Count = Count + 1
   Next
   Delete Each MutexList
   
   Status = WaitForMultipleObjects( MutexCount , Bank, WaitForAll, TimeOut )
   FreeBank Bank
   
   Return Status
End Function

Function BB_WaitForMutexes_Add( hMutex )
   Local ML.MutexList
   If hMutex <> 0
      ML = New MutexList
      ML\hMutex = hMutex
      
      MutexCount = MutexCount + 1
      
      Return 1
   EndIf
   Return 0
End Function

;Functions - Thread
Function BB_CreateThread( hPointer )
   Local SA.SECURITY_ATTRIBUTES
   
   SA = New SECURITY_ATTRIBUTES
   SA\nLength = 8
   SA\lpSecurityDescriptor = Null      ;No Security
   SA\bInheritHandle = 0         ;No Childs
   
   Local Bank = CreateBank()
   
   Thread = CreateThread( SA, 10240, hPointer, Bank, $0001, ID)
   
   Delete SA
   Return Thread
End Function

Function BB_PauseThread( hThread )
   Return SuspendThread( hThread )
End Function

Function BB_UnpauseThread( hThread )
   Return ResumeThread( hThread )
End Function

Function BB_KillThread( hThread )
   Return TerminateThread( hThread, GetExitCodeThread( hThread )  )
End Function

Function BB_CloseThread( hThread )
   CloseHandle hThread
   Return BB_KillThread( hThread )
End Function

;BB Window Handler
Global BBhWnd
Function BB_InitWindow( WName$ )
   BBhWnd = FindWindow( "Blitz Runtime Class", WName$ )
End Function

Function BB_WindowMessage()
   Local MS.MSG
   MS = New MSG
   PeekMessage( MS, BBhWnd, 0, 0, 0 )
   DispatchMessage( MS )
   ;Undone. Needs fixing
End Function

;Functions - Error
Function BB_CheckError()         ;Returns MAV-.- use "If GetLastError() Not 0" instead
   Local Error = GetLastError()
   If Error <> 0
      Bank = CreateBank(1024)
      FormatMessage($000010FF, 0, Error, $0, Stra$, 1000, 0)
      
      StrI$ = ""
      For Cur = 0 To 1023
         Byte = PeekByte(Bank, Cur)
         If Byte > 0
            StrI = StrI + Chr(Byte)
         Else
            Exit
         EndIf
      Next
      
      RuntimeError StrI
   EndIf
End Function


Vielleicht hat ja jemand anderes lust daran weiterzuarbeiten
Warbseite

DAK

BeitragDo, Nov 12, 2009 0:39
Antworten mit Zitat
Benutzer-Profile anzeigen
hol dir doch den XPMode, dann kannst dus auch unter win 7 laufen lassen. zumindest für die weiterentwicklung wirds reichen.
Gewinner der 6. und der 68. BlitzCodeCompo

Xaymar

ehemals "Cgamer"

Betreff: FastPointer

BeitragSa, Dez 26, 2009 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Da meine Userlib auf neueren Betriebssystemen nicht mehr so ganz funktioniert, empfehle ich euch FastPointer
Die lib scheint weitaus besser dokumentiert als meine und auch sicherer zu sein.
Warbseite

Silver_Knee

BeitragMo, Dez 28, 2009 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Klingt gut muss ich sagen. Außerdem find ich den Trick gut den funktionasuafruf mit nem goto zu verstecken und den funktionspointer einfach durch "am goto vorbei rechenen" zu holen. Das spart diese proginit-variablen.

Jo0oker

BeitragMi, Dez 30, 2009 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@CGamer

Zitat:
ThreadedBB funktioniert nur auf Betriebssystemen älter als Vista und neuere als 2000


Also nur mit XP...?

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Xaymar

ehemals "Cgamer"

BeitragMi, Dez 30, 2009 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja. Anscheinend wurden die Funktionen der DLLs verändert
Warbseite

Silver_Knee

BeitragMi, Dez 30, 2009 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
muss sich aber auf die mutex beziehen
hab ja selbst vista und hab des threaded laufen lassen noch ohne mutex

FireballFlame

Betreff: Re: FastPointer

BeitragMi, Dez 30, 2009 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer hat Folgendes geschrieben:
Da meine Userlib auf neueren Betriebssystemen nicht mehr so ganz funktioniert, empfehle ich euch FastPointer
Die lib scheint weitaus besser dokumentiert als meine und auch sicherer zu sein.

Ja! Funktioniert auch soweit bei mir unter Vista!
Aber hat jemand ne Idee ob/wie man darin Mutexes oder Semaphore benutzen kann? Ansonsten kann man ja nicht viel mit dem Threading machen...
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

ChristianK

BeitragMi, Dez 30, 2009 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich ist an den Funktionen nichts geändert worden. Man könnte aber mal versuchen, die SECURITY_ATTRIBUTES bei CreateThread und CreateMutex weg zu lassen. Die sind sowieso unnötig.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

Dreamora

BeitragMi, Dez 30, 2009 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
speziell wenn man die funktion mit 12 byte füttert, aber eine nLength von 8 angibt Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

FireballFlame

BeitragMi, Dez 30, 2009 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ChristianK hat Folgendes geschrieben:
Eigentlich ist an den Funktionen nichts geändert worden. Man könnte aber mal versuchen, die SECURITY_ATTRIBUTES bei CreateThread und CreateMutex weg zu lassen. Die sind sowieso unnötig.
Wie meinst du das, bzw. wie soll man die weglassen?

Dreamora hat Folgendes geschrieben:
speziell wenn man die funktion mit 12 byte füttert, aber eine nLength von 8 angibt Smile
An nLength was zu ändern, bringt nichts.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Xaymar

ehemals "Cgamer"

BeitragMi, Dez 30, 2009 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ChristianK hat Folgendes geschrieben:
Eigentlich ist an den Funktionen nichts geändert worden. Man könnte aber mal versuchen, die SECURITY_ATTRIBUTES bei CreateThread und CreateMutex weg zu lassen. Die sind sowieso unnötig.


Nicht ganz. Ich habe Probleme auf Globals zuzugreifen ohne einen Typeeintrag

Zitat:
speziell wenn man die funktion mit 12 byte füttert, aber eine nLength von 8 angibt Smile

BlitzBasic: [AUSKLAPPEN]
   SA = New SECURITY_ATTRIBUTES
SA\nLength = 8
SA\lpSecurityDescriptor = Null ;No Security
SA\bInheritHandle = 0 ;No Childs


Ist schon richtig. SA\nLength muss nur höher wenn ich mehrere SECURITY_ATTRIBUTES verwenden will
Warbseite

FireballFlame

BeitragMi, Dez 30, 2009 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum stürzt es dann nach spätestens 20 Sekunden immer ab?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Xaymar

ehemals "Cgamer"

BeitragMi, Dez 30, 2009 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Code?
Warbseite

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group