problema para mostrar 'cargando...'

Iniciado por <[(x)]>, 20 Junio 2009, 23:44 PM

0 Miembros y 1 Visitante están viendo este tema.

<[(x)]>



holas

Estoy armando un juego y en el momento que este carga las texturas no puedo hacer q la animación del 'cargando...' funcione fluidamente.

Es así:
____
|

       
  • timercargando-activar
  • cargar texturas
|___

El problema esta q la función cargar  texturas se compone por un for que va cargando todas las texturas y en el momento q empieza a cargar una se congela todo el programa asta q termina de cargarse.

Como puedo hacer para q no pase esto??.

Lo primero que se me ocurrió es armar otro ejecutable que me maneje el DC del 'cargando...'. Pero si tienen una idea mejor, espero que si, les agradeceria q me la trasmitann.

S2
<[(x)]>

Jubjub

Lo ideal es utilizar un thread que al no ser bloqueante, ira a la pefeccion.

Tambien puedes utilizar una animacion :)
Jugando con Fósforoshacking con un tono diferente


.
porno

Karcrack

No se si he entendido bien, pero con un DoEvents y un Control.Refresh creo que te sobra :P ;)

Jubjub

D:  y yo haciéndolo con threads.. en fin, gracias, investigare sobre ello ;)
Jugando con Fósforoshacking con un tono diferente


.
porno

<[(x)]>

#4

Ya me pongo a ver los threads, con DoEvents no iría ni ai..
<[(x)]>

<[(x)]>

#5
mmm
   
      Por lo que leí parece q es exactamente lo que necesito. Me podrían pasar un ejemplo de thread que no logro encontrar uno  :¬¬. si pueden ser los archivos mejor...
      Y algo mas estuve viendo que se necesita agregar la referencia 'NetFx20Wrapper', la cual busque y no tengo. DE donde puedo descargarla o encontrarla ??
     
gracias:.
<[(x)]>

XcryptOR

he aquí estos módulos de clase que te ayudaran con tu problema

Código (vb) [Seleccionar]
'clsThreading:
'Simple class that allows you to implement multithreading in your app
'
'(C) 2001 by Philipp Weidmann

'API Declarations
'Creates a new thread
Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
'Terminates a thread
Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
'Sets the priority of a thread
Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
'Returns the proirity of a thread
Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
'Enables a disabled Thread
Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
'Disables a thread
Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
'Returns the handle of the current thread
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
'Returns the ID of the current thread
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

'Consts
Private Const MAXLONG = &H7FFFFFFF

'Thread priority consts
Private Const THREAD_BASE_PRIORITY_IDLE = -15
Private Const THREAD_BASE_PRIORITY_LOWRT = 15
Private Const THREAD_BASE_PRIORITY_MAX = 2
Private Const THREAD_BASE_PRIORITY_MIN = -2
Private Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Private Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Private Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Private Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Private Const THREAD_PRIORITY_ERROR_RETURN = (MAXLONG)
Private Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
Private Const THREAD_PRIORITY_NORMAL = 0
Private Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT

'Thread creation flags
Private Const CREATE_ALWAYS = 2
Private Const CREATE_NEW = 1
Private Const CREATE_NEW_CONSOLE = &H10
Private Const CREATE_NEW_PROCESS_GROUP = &H200
Private Const CREATE_NO_WINDOW = &H8000000
Private Const CREATE_PROCESS_DEBUG_EVENT = 3
Private Const CREATE_SUSPENDED = &H4
Private Const CREATE_THREAD_DEBUG_EVENT = 2

'Types and Enums
Public Enum ThreadPriority
    tpLowest = THREAD_PRIORITY_LOWEST
    tpBelowNormal = THREAD_PRIORITY_BELOW_NORMAL
    tpNormal = THREAD_PRIORITY_NORMAL
    tpAboveNormal = THREAD_PRIORITY_ABOVE_NORMAL
    tpHighest = THREAD_PRIORITY_HIGHEST
End Enum

'Vars
Private mThreadHandle As Long
Private mThreadID As Long
Private mPriority As Long
Private mEnabled As Boolean
Private mCreated As Boolean
Private mID As Long
Public Function CreateNewThread(ByVal iDownloader As Long, ByVal cFunction As Long, Optional ByVal cPriority As Long = tpNormal, Optional ByVal cEnabled As Boolean = True)
    'Creates a new Thread
    Dim mHandle As Long
    Dim CreationFlags As Long
    Dim lpThreadID As Long
   
    'Look if the thread has already been created
    If mCreated = True Then Exit Function
   
    'Look if the thread should be enabled
    If cEnabled = True Then
        CreationFlags = 0
    Else
        'Create a disabled thread, can be enabled later with the
        ''Enabled' property
        CreationFlags = CREATE_SUSPENDED
    End If
   
    'The CreateThread Function returns the handle of the created thread;
    'if the handle is 0, it failed creating the thread
    mHandle = CreateThread(ByVal 0&, ByVal 0&, cFunction, ByVal 0&, CreationFlags, lpThreadID)
   
    If mHandle = 0 Then 'Failed creating the thread
        'Insert your own error handling
        'Debug.Print "InitializeThread Function in clsThreading failed creating a new thread"
    Else
        mThreadHandle = mHandle
        mThreadID = lpThreadID
        mCreated = True
        mID = iDownloader
    End If
End Function
Public Property Get iDownloader() As Long
    iDownloader = mID
End Property
Public Function TerminateCurrentThread()
    'Terminates the current thread
   
    'Ignore errors to prevent crashing if no thread has been created
    On Error Resume Next
    'Terminate the thread to prevent crashing if the app is closed
    'and the thread is still running (dangerous!)
    Call TerminateThread(mThreadHandle, ByVal 0&)
    mCreated = False
End Function

Public Property Get ThreadHandle() As Long
    'Returns the Handle of the current Thread
    ThreadHandle = mThreadHandle
End Property

Public Property Get ThreadID() As Long
    'Returns the ID of the current thread
    ThreadID = mThreadID
End Property

Public Property Get Priority() As Long
    'Returns a long value because the thread might have other priorities
    'than our five in the enum
   
    'Ignore errors to prevent crashing if no thread has been created
    On Error Resume Next
    Priority = GetThreadPriority(mThreadHandle)
End Property

Public Property Let Priority(ByVal tmpValue As Long)
    'Sets the Thread Priority of the actual thread
    mPriority = tmpValue
    Call SetThreadPriority(mThreadHandle, tmpValue)
End Property

Public Property Get Enabled() As Boolean
    'Returns whether the Thread is enabled or not
    Enabled = mEnabled
End Property

Public Property Let Enabled(ByVal tmpValue As Boolean)
    'Enables/Disables the Thread
   
    'Ignore errors to prevent crashing if no thread has been created
    On Error Resume Next
    If tmpValue = True Then
        'Enable the thread
        Call ResumeThread(mThreadHandle)
    ElseIf tmpValue = False Then
        'Disable the thread
        Call SuspendThread(mThreadHandle)
    End If
End Property

Private Sub Class_Terminate()
    'Terminate the thread to prevent crashing if the app is closed
    'and the thread is still running (dangerous!)
    Call TerminateCurrentThread
End Sub


Código (vb) [Seleccionar]
'----------------------------------------------------------------------------------------'
'
' Multi Downloader using multithreadings
' Created by Suk Yong Kim, 03/14/2001
'
' This project is my first project to upload to the PSC.
' Many persons contribute to create this project
' I really appreicate their efforts and codes and the great server PSC.
'
' if any question, mail to : techtrans@dreamwiz.com
'----------------------------------------------------------------------------------------'

Option Explicit

'local variable to hold collection
Private mCol As Collection


Public Function CreateNewThread(ByVal iDownloader As Long, ByVal cFunction As Long, _
    Optional ByVal cPriority As Long = tpNormal, _
    Optional ByVal cEnabled As Boolean = True, Optional sKey As String) As clsThreading
   
    'create a new object
    Dim objNewMember As clsThreading
    Set objNewMember = New clsThreading
   
    'create new thread
    Call objNewMember.CreateNewThread(iDownloader, cFunction, cPriority, cEnabled)
   
    If Len(sKey) = 0 Then
      mCol.Add objNewMember
    Else
      mCol.Add objNewMember, sKey
    End If
   
    'return the object created
    Set CreateNewThread = objNewMember
    Set objNewMember = Nothing
Exit_Function:
End Function
Public Property Get Item(vntIndexKey As Variant) As clsThreading
    Set Item = mCol(vntIndexKey)
End Property

Public Property Get Count() As Long
    Count = mCol.Count
End Property

Public Sub TerminateThread(vntIndexKey As Variant)
    On Error Resume Next
    mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
    Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
    On Error Resume Next
    Set mCol = Nothing
End Sub



<[(x)]>



Bien ya esta andando.

Gracias a todos  ;-)

s2 <[(x)]>
<[(x)]>