Multithread

Multithread

Postby pgfdz » Tue Aug 25, 2015 11:47 am

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
Paco García
pgfdz
 
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

Re: Multithread

Postby pgfdz » Tue Aug 25, 2015 12:24 pm

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
Paco García
pgfdz
 
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

Re: Multithread

Postby cnavarro » Tue Aug 25, 2015 12:54 pm

Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Multithread

Postby pgfdz » Tue Aug 25, 2015 4:45 pm

Ya me funcionó sin hacer nada. Como dicen los usuarios: Yo no he tocado nada. jejeje

Muchas gracias
Paco García
pgfdz
 
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

Re: Multithread

Postby cyberkily » Thu Jan 28, 2016 12:29 pm

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  Expand view

#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/viewtopic.php?f=3&t=27120&start=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.
Roberto Sánchez k:
cyberkily
 
Posts: 24
Joined: Fri Dec 05, 2008 11:20 pm

Re: Multithread

Postby cnavarro » Thu Jan 28, 2016 2:44 pm

Son dos librerias a añadir/sustituir

echo %hdirl%\hbvmmt.lib + >> b32.bc

and

echo %bcdir%\lib\cw32mt.lib + >> b32.bc

Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Multithread

Postby cyberkily » Fri Jan 29, 2016 11:30 am

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  Expand view

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! :)
Roberto Sánchez k:
cyberkily
 
Posts: 24
Joined: Fri Dec 05, 2008 11:20 pm

Re: Multithread

Postby AIDA » Fri Jan 29, 2016 10:02 pm

pgfdz wrote:Ya me funcionó sin hacer nada. Como dicen los usuarios: Yo no he tocado nada. jejeje

Muchas gracias



son esos duendes :mrgreen:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 78 guests