Hi agraham and forum bods,
I'm attempting to use your threading library to handle a batch process of sending e-mails but have a couple of issues.
1. I don't seem to gain any speed benefit from using a separate thread (even when compiled) as the main process still freezes until the e-mail process has completed.
2. Once the thread has finished the program crashes and presents a 'Start - not found' error.
I've put most of the offending code below, would be very grateful if anyone has any suggestions.
This code fills up an array for the thread to use and then hands over the e-mail process.
This is the e-mailer thread;
I'm attempting to use your threading library to handle a batch process of sending e-mails but have a couple of issues.
1. I don't seem to gain any speed benefit from using a separate thread (even when compiled) as the main process still freezes until the e-mail process has completed.
2. Once the thread has finished the program crashes and presents a 'Start - not found' error.
I've put most of the offending code below, would be very grateful if anyone has any suggestions.
This code fills up an array for the thread to use and then hands over the e-mail process.
B4X:
'E-mail staff and ask if anyone is available
'Get all the e-mail addresses from the database
Main.Connection.BeginTransaction
Main.Command.CommandText = "SELECT StaffEmailAddress, StaffID FROM t_Staff WHERE StaffNotify = 'Yes';"
Main.Reader.Value = Main.Command.ExecuteReader
mcount = 0
'Assign data
Do While Main.Reader.ReadNextRow = True
StaffAddress(mcount) = main.reader.GetValue(0)
StaffID(mcount) = main.reader.GetValue(1)
mcount = mcount + 1
Loop
Main.Reader.Close
' End transaction
Main.Connection.EndTransaction
'Pass the e-mailing task to a seperate thread.
rotamailthread.Start(RotaEmailSend(mcount,bookdate,bookstart,bookend))
This is the e-mailer thread;
B4X:
Sub RotaEmailSend(mcount,bookdate,bookstart,bookend)
AddObject("Mailer","SMTP")
AddObject("Message","DesktopMailMessage")
For p = 0 To mcount - 1
stafadd = staffaddress(p)
stafid = staffid(p)
'Send an e-mail telling staff member about a booking
Mailer.New1(Main.Settings.SMTPServer,25,Main.Settings.SMTPUsername,Main.Settings.SMTPPassword)
Mailer.UseSSL = Main.Settings.SMTPUseSSL
Message.New1
Message.Subject = Main.OptSMTPOrg.Text & ": Cover required for booking."
Message.From = Main.Settings.SMTPUsername
Message.AddTo(stafAdd)
MsgBody = "*** THIS IS AN AUTOMATED E-MAIL, PLEASE DO NOT REPLY ***<br><br>"
MsgBody = MsgBody & "Cover is required for the following date:<br><br>"
DateFormat("yyyy-mm-dd")
Emaildate = DateParse(bookdate)
DateFormat("dd/mm/yyyy")
MsgBody = MsgBody & "Date: " & Date(Emaildate) & "<br>"
DateFormat("yyyy-mm-dd")
MsgBody = MsgBody & "Start: " & Bookstart & "<br>"
MsgBody = MsgBody & "End: " & Bookend & "<br><br>"
MsgBody = MsgBody & "If you are able to cover please click the link below:<br><br>"
MsgBody = MsgBody & "<a href='http://" & main.CompleteBookingDir.Text & "new/rota.php?staffmemberid=" & stafid & "&date=" & bookdate & "&starttime=" & bookstart & "&endtime=" & bookend & "'>Work this shift</a>"
main.htmlemail.Value = Message.Value
main.htmlemail.SetProperty("IsBodyHtml",True)
Message.Body = MsgBody
Mailer.Send(Message.Value)
Next
Mailer.Dispose
Message.Dispose
End Sub