Thank you, but you still missed the point. Please re-read my previous messages.
EMG
Thank you, but you still missed the point. Please re-read my previous messages.
EMG
Here is what i do :
static osuivi,osays1,wvars2
function main()
local ii
wvars2:=0
suivi()
*
ii:=0
do while ! eof()
wvars2:=ii
oSays1:setText(wvars2)
oSays1:refresh()
i++
SKIP
enddo
*
oSuivi:end()
*
return .T.
Thank you. Sorry, I already use a similar technique in specific loops but its application in all the existing loops would require too much work (I have 348 PRGs containing such loops or iterative command like REPLACE ... FOR, etc.).
EMG
Enrico,
You could show an AVI file in your MsgBox() function
I think the AVI stops the animation too, if it uses a timer. Am I wrong?
EMG
Enrico,
> Anyway, I don't really need to get the rest of the system responding fast during my waiting loops.
Maybe you don't care but your users probably do. Perhaps they want to do something else while waiting, like check their email or something. It is good and polite practice to put sysrefresh() in all loops that take more that a few seconds to complete.
I hate it when an application freezes my computer.
Ewe's idea is also a good one. For up to about 10-15 seconds I would use an hourglass cursor, for more time I would use a progress bar if possible, or some kind of animation if you do not have the data for a progress bar.
Regards,
James
I agree. But I just can not afford the huge work necessary to change all of my loops. And some of them are not explicit loops as INDEX ON or REPLACE ALL.
EMG
Enrico Maria Giordano wrote:No, other apps don't stop. Maybe I can use threads but I'm not familiar with them.
EMG
Patrizio,
Have you tried to use mt with FiveWin ? ![]()
mt should work fine except for some GUI components (modal dialog boxes)
mt should work fine except for some GUI components (modal dialog boxes)
Antonio Linares wrote:Patrizio,
Have you tried to use mt with FiveWin ?
mt should work fine except for some GUI components (modal dialog boxes)
Once there is a good support for threads in Harbour/xHarbour, then we will be able to adapt FWH to multithreading.
#include "Fivewin.ch"
PROC Main()
LOCAL aObj := Array(1000000)
LOCAL oDlg, oButton
PUBLIC nDestroyed := 0
DEFINE DIALOG oDlg SIZE 400, 500
@ 11, 0 BUTTON oButton PROMPT "Start" SIZE 80, 8 ACTION Button1_Click(oDlg)
ACTIVATE DIALOG oDlg CENTER
RETURN
PROC Button1_Click(oDlg)
LOCAL n := 0
LOCAL pMutex := HB_MutexCreate()
FOR n :=1 TO 10
StartThread( "MyFuncForThreads", pMutex, oDlg, n )
NEXT
WaitForThreads()
RETURN
PROC MyFuncForThreads(pMutex,oDlg,n)
LOCAL cTID
HB_MutexLock(pMutex)
oDlg:Say(n,0,"Thread ID" + lTrim(Str(GetThreadID())) + " system id: " + lTrim(Str(GetSystemThreadID())))
HB_MutexUnlock(pMutex)
RETURNHB_MUTEXCREATE
STARTTHREAD
WAITFORTHREADS
MUTEXLOCK
GETTHREADID
GETSYSTEMTHREADID
MUTEXUNLOCKSTARTTHREAD
WAITFORTHREADS
GETTHREADID
GETSYSTEMTHREADIDanserkk wrote:Dear Mr.Patrizio,
Thanks for the sample. Which xHarbour lib is to be added. I am getting unresolved external
HB_MUTEXCREATE
STARTTHREAD
WAITFORTHREADS
MUTEXLOCK
GETTHREADID
GETSYSTEMTHREADID
MUTEXUNLOCKanserkk wrote:Hi,
xHarbour VmMt.Lib contains all the missing MultiThread related functions
HB_MUTEXCREATE STARTTHREAD WAITFORTHREADS MUTEXLOCK GETTHREADID GETSYSTEMTHREADID MUTEXUNLOCK
Unfortunately when I compile, I am still getting Unresolved Externals calls from VmMt.Lib to the following functions
__endthreadex
__beginthreadex
Regards
Anser