Hello all,
I could use a bit of your collective wisdom, please.
I am converting an application from xHB (.com) to harbour (FW1.7, harbour and bcc7). I need to make use of multi threading. I have linked in cw32mt.lib instead of cw32.lib
My application returns FALSE for a call to HB_MultiThread(). It links OK, but does not start another thread, hence I get an error when I stop the thread.
Is multithread supported with harbour? If so, what am I missing, please?
Thanks in anticipation.
Pat.
MAK file follows:
#Borland make sample (c) FiveTech Software 2005-2009
HBDIR=c:\harbour
BCDIR=c:\bcc7
FWDIR=c:\fwh17
#change these paths as needed
.path.OBJ = .\obj
.path.PRG = .\
.path.CH = $(FWDIR)\include;$(HBDIR)\include
.path.C = .\
.path.rc = .\
#important: Use Uppercase for filenames extensions, in the next two rules!
PRG = \
ottos.PRG \
printers.PRG \
errview.PRG \
compdetl.PRG \
HELP.PRG \
nameinit.PRG \
SYSOPTS.PRG \
MWINUTIL.PRG \
WINUTIL.PRG \
ABOUT.PRG \
FAQ.PRG \
factsht.PRG \
stocksel.PRG \
stockcat.PRG \
register.PRG \
screen.PRG \
tsm.PRG \
paytypes.PRG \
tabs.PRG \
POS.PRG \
POSSETUP.PRG \
paybuttn.PRG \
datasync.PRG \
repsales.PRG \
repstaff.PRG \
repregid.PRG \
DKTPRINT.PRG \
repbank.PRG \
reglook.PRG \
reminder.PRG \
RepSale1.PRG \
dktorder.PRG \
tables.PRG \
DKTTABLE.PRG \
discount.PRG \
dktcharge.PRG \
btnlabel.PRG \
repsale2.PRG \
email.PRG \
emailbrw.PRG \
repacct.PRG \
repacc1.PRG \
dktsales.PRG \
POS1.PRG \
repsale3.PRG \
RepSale4.PRG \
tsmtp.PRG \
UTILS.PRG \
suppsel.PRG \
stksel1.PRG \
stkrec.PRG \
repsale5.PRG \
colldata.PRG \
ORDPOST.PRG \
ordprn.PRG \
ORDSEL.PRG \
lkupsupp.PRG \
password.PRG \
ASSMAKE.PRG \
xStkRec.PRG \
xstktake.PRG \
setmenu.PRG \
stkvar.PRG \
RepSal1a.PRG \
ORDOPTS.PRG \
eftpos.PRG \
TABOnFly.PRG \
ChitDisp.PRG \
repsale6.PRG \
repsale7.PRG \
stockgrp.PRG \
archive.PRG \
cusentry.PRG \
CUSTSEL.PRG \
PROMO.PRG \
syscolrs.PRG \
CUSTORD.PRG \
units.PRG \
colines.PRG \
HHOrders.PRG \
dktoitem.PRG \
DASH1.PRG \
repsale8.PRG \
reports.PRG \
REPTIMES.PRG \
REGDEFLT.PRG \
genlabel.PRG \
lkupstk.PRG \
USERS.PRG \
txtahead.PRG \
repbank2.PRG \
PUBHOLS.PRG \
zrepcat.PRG \
repbank3.PRG \
events.PRG \
EVNTFOOD.PRG \
RepSal1b.PRG \
EVENTORD.PRG \
SALETIME.PRG \
dashbd1.PRG \
dashbd1a.PRG \
reqhead.PRG \
DEPT.PRG \
reqlines.PRG \
TASKLIST.PRG \
tasklst1.PRG \
nonconf.PRG \
position.PRG \
SHIFTS.PRG \
dashbd2.PRG \
taskutil.PRG \
repsale9.PRG \
prodrun.PRG \
activex.PRG \
calendar.PRG \
tcalend.PRG \
repsal4a.PRG \
vouchers.PRG \
sms.PRG \
dashbd3.PRG \
repconv.PRG \
shopify.PRG \
dash1a.PRG \
pos2.PRG \
evnttime.PRG \
wasteprn.PRG \
stockop1.PRG \
wbrowse.PRG
rem C = \
rem two.C
PROJECT : ottos.exe
ottos.exe : $(PRG:.PRG=.OBJ) $(C:.C=.OBJ) ottos.res
echo off
echo $(BCDIR)\lib\c0w32.obj + > b32.bc
echo obj\ottos.obj + >> b32.bc
echo obj\printers.obj + >> b32.bc
echo obj\errview.obj + >> b32.bc
echo obj\compdetl.obj + >> b32.bc
echo obj\HELP.obj + >> b32.bc
echo obj\nameinit.obj + >> b32.bc
echo obj\SYSOPTS.obj + >> b32.bc
echo obj\MWINUTIL.obj + >> b32.bc
echo obj\WINUTIL.obj + >> b32.bc
echo obj\ABOUT.obj + >> b32.bc
echo obj\FAQ.obj + >> b32.bc
echo obj\factsht.obj + >> b32.bc
echo obj\stocksel.obj + >> b32.bc
echo obj\stockcat.obj + >> b32.bc
echo obj\register.obj + >> b32.bc
echo obj\screen.obj + >> b32.bc
echo obj\tsm.obj + >> b32.bc
echo obj\paytypes.obj + >> b32.bc
echo obj\tabs.obj + >> b32.bc
echo obj\POS.obj + >> b32.bc
echo obj\POSSETUP.obj + >> b32.bc
echo obj\paybuttn.obj + >> b32.bc
echo obj\datasync.obj + >> b32.bc
echo obj\repsales.obj + >> b32.bc
echo obj\repstaff.obj + >> b32.bc
echo obj\repregid.obj + >> b32.bc
echo obj\DKTPRINT.obj + >> b32.bc
echo obj\repbank.obj + >> b32.bc
echo obj\reglook.obj + >> b32.bc
echo obj\reminder.obj + >> b32.bc
echo obj\RepSale1.obj + >> b32.bc
echo obj\dktorder.obj + >> b32.bc
echo obj\tables.obj + >> b32.bc
echo obj\DKTTABLE.obj + >> b32.bc
echo obj\discount.obj + >> b32.bc
echo obj\dktcharge.obj + >> b32.bc
echo obj\btnlabel.obj + >> b32.bc
echo obj\repsale2.obj + >> b32.bc
echo obj\email.obj + >> b32.bc
echo obj\emailbrw.obj + >> b32.bc
echo obj\repacct.obj + >> b32.bc
echo obj\repacc1.obj + >> b32.bc
echo obj\dktsales.obj + >> b32.bc
echo obj\POS1.obj + >> b32.bc
echo obj\repsale3.obj + >> b32.bc
echo obj\RepSale4.obj + >> b32.bc
echo obj\tsmtp.obj + >> b32.bc
echo obj\UTILS.obj + >> b32.bc
echo obj\suppsel.obj + >> b32.bc
echo obj\stksel1.obj + >> b32.bc
echo obj\stkrec.obj + >> b32.bc
echo obj\repsale5.obj + >> b32.bc
echo obj\colldata.obj + >> b32.bc
echo obj\ORDPOST.obj + >> b32.bc
echo obj\ordprn.obj + >> b32.bc
echo obj\ORDSEL.obj + >> b32.bc
echo obj\lkupsupp.obj + >> b32.bc
echo obj\password.obj + >> b32.bc
echo obj\ASSMAKE.obj + >> b32.bc
echo obj\xStkRec.obj + >> b32.bc
echo obj\xstktake.obj + >> b32.bc
echo obj\setmenu.obj + >> b32.bc
echo obj\stkvar.obj + >> b32.bc
echo obj\RepSal1a.obj + >> b32.bc
echo obj\ORDOPTS.obj + >> b32.bc
echo obj\eftpos.obj + >> b32.bc
echo obj\TABOnFly.obj + >> b32.bc
echo obj\ChitDisp.obj + >> b32.bc
echo obj\repsale6.obj + >> b32.bc
echo obj\repsale7.obj + >> b32.bc
echo obj\stockgrp.obj + >> b32.bc
echo obj\archive.obj + >> b32.bc
echo obj\cusentry.obj + >> b32.bc
echo obj\CUSTSEL.obj + >> b32.bc
echo obj\PROMO.obj + >> b32.bc
echo obj\syscolrs.obj + >> b32.bc
echo obj\CUSTORD.obj + >> b32.bc
echo obj\units.obj + >> b32.bc
echo obj\colines.obj + >> b32.bc
echo obj\HHOrders.obj + >> b32.bc
echo obj\dktoitem.obj + >> b32.bc
echo obj\DASH1.obj + >> b32.bc
echo obj\repsale8.obj + >> b32.bc
echo obj\reports.obj + >> b32.bc
echo obj\REPTIMES.obj + >> b32.bc
echo obj\REGDEFLT.obj + >> b32.bc
echo obj\genlabel.obj + >> b32.bc
echo obj\lkupstk.obj + >> b32.bc
echo obj\USERS.obj + >> b32.bc
echo obj\txtahead.obj + >> b32.bc
echo obj\repbank2.obj + >> b32.bc
echo obj\PUBHOLS.obj + >> b32.bc
echo obj\zrepcat.obj + >> b32.bc
echo obj\repbank3.obj + >> b32.bc
echo obj\events.obj + >> b32.bc
echo obj\EVNTFOOD.obj + >> b32.bc
echo obj\RepSal1b.obj + >> b32.bc
echo obj\EVENTORD.obj + >> b32.bc
echo obj\SALETIME.obj + >> b32.bc
echo obj\dashbd1.obj + >> b32.bc
echo obj\dashbd1a.obj + >> b32.bc
echo obj\reqhead.obj + >> b32.bc
echo obj\DEPT.obj + >> b32.bc
echo obj\reqlines.obj + >> b32.bc
echo obj\TASKLIST.obj + >> b32.bc
echo obj\tasklst1.obj + >> b32.bc
echo obj\nonconf.obj + >> b32.bc
echo obj\position.obj + >> b32.bc
echo obj\SHIFTS.obj + >> b32.bc
echo obj\dashbd2.obj + >> b32.bc
echo obj\taskutil.obj + >> b32.bc
echo obj\repsale9.obj + >> b32.bc
echo obj\activex.obj + >> b32.bc
echo obj\wbrowse.obj + >> b32.bc
echo obj\prodrun.obj + >> b32.bc
echo obj\tcalend.obj + >> b32.bc
echo obj\repsal4a.obj + >> b32.bc
echo obj\vouchers.obj + >> b32.bc
echo obj\sms.obj + >> b32.bc
echo obj\dashbd3.obj + >> b32.bc
echo obj\repconv.obj + >> b32.bc
echo obj\shopify.obj + >> b32.bc
echo obj\dash1a.obj + >> b32.bc
echo obj\POS2.obj + >> b32.bc
echo obj\evnttime.obj + >> b32.bc
echo obj\wasteprn.obj + >> b32.bc
echo obj\stockop1.obj + >> b32.bc
echo obj\calendar.obj, + >> b32.bc
echo ottos.exe, + >> b32.bc
echo ottos.map, + >> b32.bc
echo $(FWDIR)\lib\FiveH.lib + >> b32.bc
echo $(FWDIR)\lib\FiveHC.lib + >> b32.bc
echo $(HBDIR)\lib\hbrtl.lib + >> b32.bc
echo $(HBDIR)\lib\hbvm.lib + >> b32.bc
echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
echo $(HBDIR)\lib\hblang.lib + >> b32.bc
echo $(HBDIR)\lib\hbmacro.lib + >> b32.bc
echo $(HBDIR)\lib\hbrdd.lib + >> b32.bc
echo $(HBDIR)\lib\rddntx.lib + >> b32.bc
echo $(HBDIR)\lib\rddcdx.lib + >> b32.bc
echo $(HBDIR)\lib\rddfpt.lib + >> b32.bc
echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
echo $(HBDIR)\lib\hbdebug.lib + >> b32.bc
echo $(HBDIR)\lib\hbcommon.lib + >> b32.bc
echo $(HBDIR)\lib\hbpp.lib + >> b32.bc
echo $(HBDIR)\lib\hbwin.lib + >> b32.bc
echo $(HBDIR)\lib\hbcpage.lib + >> b32.bc
echo $(HBDIR)\lib\hbct.lib + >> b32.bc
echo $(HBDIR)\lib\hbziparc.lib + >> b32.bc
echo $(HBDIR)\lib\hbmzip.lib + >> b32.bc
echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
echo $(HBDIR)\lib\minizip.lib + >> b32.bc
echo $(HBDIR)\lib\hbcplr.lib + >> b32.bc
echo $(HBDIR)\lib\xhb.lib + >> b32.bc
echo $(HBDIR)\lib\hbpcre.lib + >> b32.bc
rem Uncomment these two lines to use Advantage RDD
rem echo $(HBDIR)\lib\rddads.lib + >> b32.bc
rem echo $(HBDIR)\lib\Ace32.lib + >> b32.bc
echo $(BCDIR)\lib\cw32mt.lib + >> b32.bc
echo $(BCDIR)\lib\import32.lib + >> b32.bc
echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
echo $(BCDIR)\lib\psdk\shell32.lib + >> b32.bc
echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
echo $(BCDIR)\lib\psdk\rasapi32.lib, >> b32.bc
IF EXIST ottos.res echo ottos.res >> b32.bc
$(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
del b32.bc
.PRG.OBJ:
$(HBDIR)\bin\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
$(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c > error.txt
.C.OBJ:
echo -c -tWM -D__HARBOUR__ -DHB_API_MACROS > tmp
echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
$(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
del tmp
ottos.res : ottos.rc
$(BCDIR)\bin\brc32.exe -r ottos.rc