FreeBasic: Multithreading

Aus Wikibooks

Wechseln zu: Navigation, Suche

Wikipedia-logo.png Multithreading

Hinweis: FreeBASIC in Verbindung mit fbGFX ist noch nicht Threadsafe, das heißt, der Umgang mit Threads ist derzeit (0.18 CVS) höchst instabil, zumindest, wenn mehr als 1 Thread FBGFX-Funktionen nutzt. Dazu gehören auch Sleep und Inkey.

[Bearbeiten] Uhrzeit

declare sub uhr()
Dim Shared WriteRigth As any ptr
Dim        handler    as any ptr
Dim        i          as integer
 
WriteRigth = MUTEXCREATE
 
handler = THREADCREATE(@Uhr)
 
MUTEXLOCK WriteRigth
    locate 2,1
MUTEXUNLOCK WriteRigth
 
for i=0 to 20
    MUTEXLOCK WriteRigth
        ? "Hallo Welt Nummer ";i;" Test"
    MUTEXUNLOCK WriteRigth
    sleep 500
next i
 
sub uhr()
    dim csl as integer
    dim p   as integer
    Dim timeold as string
 
    do
        if timeold<>time$ then
            MUTEXLOCK WriteRigth
                csl=Csrlin
                p=Pos
                locate 1,1
                ? time$
                locate csl, p
                timeold=time$
            MUTEXUNLOCK WriteRigth
        end if
        sleep 10
    loop
end sub

Nachteile:

  • Probleme mit Input
  • ...

[Bearbeiten] Beenden bei Tastendruck

declare sub Test()
Dim handler as any ptr
dim i       as integer
 
screen 19
 
handler = THREADCREATE(@Test())
 
for i=0 to 200
    color i mod 15
    ? i
    sleep 500,1
next i
 
sub test
    do
        if inkey$<>"" then end
        sleep 1
    loop
end sub
Persönliche Werkzeuge