Page 1 of 1
Multithread
Posted: Tue Aug 25, 2015 11:47 am
by pgfdz
Hola
Estoy intentando hacer un programa multihilo y según tengo entendido tengo que enlazar la librería hbvmmt.lib en lugar de hbvm.lib
El programa está en Visual C.
También he visto que había que poner un define al compilar: /dHB_MT_VM
Recompilando el proyecto, la función hb_mtvm() me sigue devolviendo .F.
¿Alguien sabe que me falta?
Un saludo
Re: Multithread
Posted: Tue Aug 25, 2015 12:24 pm
by pgfdz
Me respondo
Aunque la función da .f., el programa funciona con funciones de threads.
Supongo que será normal. Si alguien sabe algo, se agradecería.
Un saludo
Re: Multithread
Posted: Tue Aug 25, 2015 12:54 pm
by cnavarro
Re: Multithread
Posted: Tue Aug 25, 2015 4:45 pm
by pgfdz
Ya me funcionó sin hacer nada. Como dicen los usuarios: Yo no he tocado nada. jejeje
Muchas gracias
Re: Multithread
Posted: Thu Jan 28, 2016 12:29 pm
by cyberkily
Hola a todos,
Trabajo con estas versiones:
FWH 64 13.05 (MSVC++)
Harbour 3.2.0dev (r1306211258)
No consigo hacer que me funcione este código de multihilos. No hace nada cuando se ejecuta
hb_threadStart, devuelve nil.
¿Podríais echarme una mano por favor?
Code: Select all
#include "fivewin.ch"
PROCEDURE 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
PROCEDURE Button1_Click(oDlg)
LOCAL n := 0
LOCAL pMutex := HB_MutexCreate()
LOCAL oThread
LOCAL nVal
FOR n :=1 to 10
hb_threadStart( @MyFuncForThreads(), pMutex, oDlg, n)
NEXT n
WaitForThreads()
RETURN
PROCEDURE MyFuncForThreads(pMutex, oDlg ,n)
HB_MutexLock(pMutex)
oDlg:Say(n,0,"Thread ID" + lTrim(Str(GetThreadID())) + " system id: " + lTrim(Str(GetSystemThreadID())))
HB_MutexUnlock(pMutex)
RETURN
El código lo tomé de ejemplo en este post:
http://forums.fivetechsupport.com/viewt ... =0#p150719
El build que he usado es el básico de los samples. He probado añadiendo la %hdirl%\hbvmmt.lib según he leído en ese post, pero no he notado cambios.
Gracias de antemano!
Roberto Sánchez K.
Re: Multithread
Posted: Thu Jan 28, 2016 2:44 pm
by cnavarro
Son dos librerias a añadir/sustituir
echo %hdirl%\hbvmmt.lib + >> b32.bc
and
echo %bcdir%\lib\cw32mt.lib + >> b32.bc
Re: Multithread
Posted: Fri Jan 29, 2016 11:30 am
by cyberkily
Cristobal,
Muchas gracias por responder
* La 1ª lib hbvmmt la tenía ya puesta, pero no puedo quitar la de hbvm.lib del bat porque no compila. Incluyo entonces ambas y sí que compila ok
* La 2ª no la tengo disponible porque estoy compilando a 64 y el "linkador" es el vc64, que no tiene la cw32mt.lib
He supuesto que el sufijo "mt" de las lib tiene que ver con los multithread, con lo que he estado añadiendo las librerías de vc 64 que contenían "MT" en plan dando palos de ciego y agua de nuevo.
Os muestro mi bat con todas las librerías que incluyo.
Code: Select all
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FWH 64 for Harbour 13.05 (MSVC++) May.2013 Harbour development power ³Ü
ECHO ³ (c) FiveTech, 1993-2013 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8 ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
if ATHREAD == A GOTO :SINTAX
if NOT EXIST THREAD.prg GOTO :NOEXIST
if "%FWDIR%" == "" set FWDIR=D:\FWH64
if "%HBDIR%" == "" set HBDIR=D:\harbour64
ECHO Compiling...
set hdir=%HBDIR%
set hdirl=%hdir%\lib
set vcdir=D:\vc64
set include=%vcdir%\include;%hdir%\include;%include%
set lib=%vcdir%\lib;%hdir%\lib;%lib%
%hdir%\bin\harbour THREAD /n /i%fwdir%\include;%hdir%\include /w /p /d__64__
IF ERRORLEVEL 1 GOTO COMPILEERROR
@type comp.log
@type warnings.log
%vcdir%\bin\cl -TP -W3 -c THREAD.c
:ENDCOMPILE
IF EXIST THREAD.rc %vcdir%\bin\rc -r -I%hdir%\include;%vcdir%\include -D__64__ THREAD
echo THREAD.obj > msvc.tmp
echo %fwdir%\lib\FiveH64.lib %fwdir%\lib\FiveHC64.lib >> msvc.tmp
echo %hdirl%\hbrtl.lib >> msvc.tmp
echo %hdirl%\hbvm.lib >> msvc.tmp
echo %hdirl%\hbvmmt.lib >> b32.bc
echo %hdirl%\gtgui.lib >> msvc.tmp
echo %hdirl%\hblang.lib >> msvc.tmp
echo %hdirl%\hbmacro.lib >> msvc.tmp
echo %hdirl%\hbrdd.lib >> msvc.tmp
echo %hdirl%\rddntx.lib >> msvc.tmp
echo %hdirl%\rddcdx.lib >> msvc.tmp
echo %hdirl%\rddfpt.lib >> msvc.tmp
echo %hdirl%\hbsix.lib >> msvc.tmp
echo %hdirl%\hbdebug.lib >> msvc.tmp
echo %hdirl%\hbcommon.lib >> msvc.tmp
echo %hdirl%\hbpp.lib >> msvc.tmp
echo %hdirl%\hbcpage.lib >> msvc.tmp
echo %hdirl%\hbwin.lib >> msvc.tmp
echo %hdirl%\hbct.lib >> msvc.tmp
echo %hdirl%\hbziparc.lib >> msvc.tmp
echo %hdirl%\hbmzip.lib >> msvc.tmp
echo %hdirl%\hbzlib.lib >> msvc.tmp
echo %hdirl%\hbpcre.lib >> msvc.tmp
echo %hdirl%\minizip.lib >> msvc.tmp
echo %hdirl%\xhb.lib >> msvc.tmp
echo %hdirl%\hbcplr.lib >> msvc.tmp
echo %hdirl%\png.lib >> msvc.tmp
rem Uncomment these two lines to use Advantage RDD
rem echo %hdirl%\rddads.lib >> msvc.tmp
rem echo %hdirl%\ace32.lib >> msvc.tmp
echo %vcdir%\lib\kernel32.lib >> msvc.tmp
echo %vcdir%\lib\user32.lib >> msvc.tmp
echo %vcdir%\lib\gdi32.lib >> msvc.tmp
echo %vcdir%\lib\winspool.lib >> msvc.tmp
echo %vcdir%\lib\comctl32.lib >> msvc.tmp
echo %vcdir%\lib\comdlg32.lib >> msvc.tmp
echo %vcdir%\lib\advapi32.lib >> msvc.tmp
echo %vcdir%\lib\shell32.lib >> msvc.tmp
echo %vcdir%\lib\ole32.lib >> msvc.tmp
echo %vcdir%\lib\oleaut32.lib >> msvc.tmp
echo %vcdir%\lib\uuid.lib >> msvc.tmp
echo %vcdir%\lib\odbc32.lib >> msvc.tmp
echo %vcdir%\lib\odbccp32.lib >> msvc.tmp
echo %vcdir%\lib\iphlpapi.lib >> msvc.tmp
echo %vcdir%\lib\mpr.lib >> msvc.tmp
echo %vcdir%\lib\version.lib >> msvc.tmp
echo %vcdir%\lib\wsock32.lib >> msvc.tmp
echo %vcdir%\lib\msimg32.lib >> msvc.tmp
echo %vcdir%\lib\oledlg.lib >> msvc.tmp
echo %vcdir%\lib\psapi.lib >> msvc.tmp
echo %vcdir%\lib\gdiplus.lib >> msvc.tmp
echo %vcdir%\lib\winmm.lib >> msvc.tmp
echo %vcdir%\lib\clfsmgmt.lib >> msvc.tmp
echo %vcdir%\lib\libcmt.lib >> msvc.tmp
echo %vcdir%\lib\libcmtd.lib >> msvc.tmp
echo %vcdir%\lib\libcpmt.lib >> msvc.tmp
echo %vcdir%\lib\libcpmt1.lib >> msvc.tmp
echo %vcdir%\lib\libcpmtd.lib >> msvc.tmp
echo %vcdir%\lib\libcpmtd0.lib >> msvc.tmp
echo %vcdir%\lib\libcpmtd1.lib >> msvc.tmp
echo %vcdir%\lib\mgmtapi.lib >> msvc.tmp
echo %vcdir%\lib\mtx.lib >> msvc.tmp
echo %vcdir%\lib\mtxdm.lib >> msvc.tmp
IF EXIST THREAD.res echo THREAD.res >> msvc.tmp
%vcdir%\bin\link @msvc.tmp /nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built *
D:
LIMPIA.BAT
GOTO EXIT
ECHO
rem delete temporary files
@del *.c
@del msvc.tmp
:COMPILEERROR
@type comp.log
ECHO * Compiling errors *
GOTO EXIT
:LINKERROR
ECHO * Linking errors *
GOTO EXIT
:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT
:NOEXIST
ECHO The specified PRG THREAD does not exist
:EXIT
pause
Muchas gracias!
Re: Multithread
Posted: Fri Jan 29, 2016 10:02 pm
by AIDA
pgfdz wrote:Ya me funcionó sin hacer nada. Como dicen los usuarios: Yo no he tocado nada. jejeje
Muchas gracias
son esos duendes