<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://www.codeplex.com/rss.xsl"?><rss version="2.0"><channel><title>MTmyVFP</title><link>http://www.codeplex.com/mtmyvfp/Project/ProjectRss.aspx</link><description>Multi-thread VFP desktop code.</description><item><title>Created Release: MTmyVFP3 Source Only (Sep 21, 2008)</title><link>http://www.codeplex.com/mtmyvfp/Release/ProjectReleases.aspx?ReleaseId=17523</link><description>&lt;div&gt;
Source is also in the installation file.&lt;br&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Sun, 21 Sep 2008 13:22:20 GMT</pubDate><guid isPermaLink="false">Created Release: MTmyVFP3 Source Only (Sep 21, 2008) 20080921012220P</guid></item><item><title>UPDATED RELEASE: MTmyVFP2.5 Production (Nov 29, 2006)</title><link>http://www.codeplex.com/mtmyvfp/Release/ProjectReleases.aspx?ReleaseId=1159</link><description>&lt;div&gt;
Multi-thread Foxpro desktop code in a way that is similar to how it's done in .NET.  Works in VFP 7,8, and 9.&lt;br&gt; &lt;br&gt;Example Use from command window:&lt;br&gt; &lt;br&gt;t=CREATEOBJECT('testserver.thread') &lt;br&gt;t.start(5,&amp;quot;do c:\MTmyVFP\MyThreadFunc WITH p2&amp;quot;) &lt;br&gt;&amp;amp;&amp;amp; start method params:(1)#threads,(2)VFP code to MT,(3)Silent mode &lt;br&gt;?t.check &amp;amp;&amp;amp; returns .T. if completed &lt;br&gt;t=null &amp;amp;&amp;amp; cleanup&lt;br&gt; &lt;br&gt;Background printing:&lt;br&gt;t=CREATEOBJECT('testserver.thread') &lt;br&gt;t.start(1,&amp;quot;do c:\MTmyVFP\backprint WITH &amp;lt;name of report&amp;gt;&amp;quot;) &lt;br&gt;&amp;amp;&amp;amp; start method params:(1)#threads,(2)VFP code to MT,(3)Silent mode &lt;br&gt;?t.check &amp;amp;&amp;amp; returns .T. if completed &lt;br&gt;t=null &amp;amp;&amp;amp; cleanup&lt;br&gt;
&lt;/div&gt;</description><author></author><pubDate>Mon, 30 Jun 2008 18:21:55 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: MTmyVFP2.5 Production (Nov 29, 2006) 20080630062155P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=30</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;myparameter&amp;quot;,[MESSAGEBOX(&amp;quot;My thread done!&amp;quot;,&amp;quot;Result&amp;quot;)],[? &amp;quot;processing...&amp;quot;])&lt;br /&gt;Param 1 - the code that will run in a background thread&lt;br /&gt;Param 2 (optional) - any parameter you want to pass to your code&lt;br /&gt;Param 3 (optional) - code that will run when your thread completes&lt;br /&gt;Param 4 (optional) - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;--------&lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;For more elaborate examples of using this class see:&lt;br /&gt;VFPWebCrawler - &lt;a href="http://www.codeplex.com/vfpwebcrawler" class="externalLink"&gt;http://www.codeplex.com/vfpwebcrawler&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;and&lt;br /&gt;Thread Test by Fernando Bozzo (VFP 8,9)&lt;br /&gt; - &lt;a href="http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip" class="externalLink"&gt;http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Tue, 24 Jun 2008 10:36:59 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080624103659A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=29</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;myparameter&amp;quot;,[MESSAGEBOX(&amp;quot;My thread done!&amp;quot;,&amp;quot;Result&amp;quot;)],&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread&lt;br /&gt;Param 2 (optional) - any parameter you want to pass to your code&lt;br /&gt;Param 3 (optional) - code that will run when your thread completes&lt;br /&gt;Param 4 (optional) - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;--------&lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;For more elaborate examples of using this class see:&lt;br /&gt;VFPWebCrawler - &lt;a href="http://www.codeplex.com/vfpwebcrawler" class="externalLink"&gt;http://www.codeplex.com/vfpwebcrawler&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;and&lt;br /&gt;Thread Test by Fernando Bozzo (VFP 8,9)&lt;br /&gt; - &lt;a href="http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip" class="externalLink"&gt;http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Tue, 24 Jun 2008 10:29:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080624102939A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=28</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;{oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;myparameter&amp;quot;,&lt;a href="http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=MESSAGEBOX%28%22My%20thread%20done%21%22%2c%22Result%22%29&amp;amp;referringTitle=Home"&gt;MESSAGEBOX(&amp;quot;My thread done!&amp;quot;,&amp;quot;Result&amp;quot;)&lt;/a&gt;,&amp;quot;form1.processing&amp;quot;)}&lt;br /&gt;Param 1 - the code that will run in a background thread&lt;br /&gt;Param 2 (optional) - any parameter you want to pass to your code&lt;br /&gt;Param 3 (optional) - code that will run when your thread completes&lt;br /&gt;Param 4 (optional) - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;--------&lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;For more elaborate examples of using this class see:&lt;br /&gt;VFPWebCrawler - &lt;a href="http://www.codeplex.com/vfpwebcrawler" class="externalLink"&gt;http://www.codeplex.com/vfpwebcrawler&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;and&lt;br /&gt;Thread Test by Fernando Bozzo (VFP 8,9)&lt;br /&gt; - &lt;a href="http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip" class="externalLink"&gt;http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Tue, 24 Jun 2008 10:28:27 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080624102827A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=27</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;myparameter&amp;quot;,&lt;a href="http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=MESSAGEBOX%28%22My%20thread%20done%21%22%2c%22Result%22%29&amp;amp;referringTitle=Home"&gt;MESSAGEBOX(&amp;quot;My thread done!&amp;quot;,&amp;quot;Result&amp;quot;)&lt;/a&gt;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread&lt;br /&gt;Param 2 (optional) - any parameter you want to pass to your code&lt;br /&gt;Param 3 (optional) - code that will run when your thread completes&lt;br /&gt;Param 4 (optional) - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;--------&lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;For more elaborate examples of using this class see:&lt;br /&gt;VFPWebCrawler - &lt;a href="http://www.codeplex.com/vfpwebcrawler" class="externalLink"&gt;http://www.codeplex.com/vfpwebcrawler&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;and&lt;br /&gt;Thread Test by Fernando Bozzo (VFP 8,9)&lt;br /&gt; - &lt;a href="http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip" class="externalLink"&gt;http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Tue, 24 Jun 2008 10:16:28 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080624101628A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=26</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;blah&amp;quot;,&amp;quot;form1.threadlogdone&amp;quot;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread&lt;br /&gt;Param 2 - any parameter you want to pass to your code&lt;br /&gt;Param 3 - code that will run when your thread completes&lt;br /&gt;Param 4 - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;--------&lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;For more elaborate examples of using this class see:&lt;br /&gt;VFPWebCrawler - &lt;a href="http://www.codeplex.com/vfpwebcrawler" class="externalLink"&gt;http://www.codeplex.com/vfpwebcrawler&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;and&lt;br /&gt;Thread Test by Fernando Bozzo (VFP 8,9)&lt;br /&gt; - &lt;a href="http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip" class="externalLink"&gt;http://www.portalfox.com/articulos/archivos/bozzo/Test_Threads.zip&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Mon, 23 Jun 2008 12:14:33 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080623121433P</guid></item><item><title>New Post: MTmyVFP3 issues</title><link>http://www.codeplex.com/mtmyvfp/Thread/View.aspx?ThreadId=30071</link><description>&lt;div style="line-height: normal;"&gt;If you delete the RefrGrid method of the grid (it was left in as an oversight and is not needed), then it will scroll as usual while the threads are running.&lt;br&gt;
&lt;br&gt;
If you leave Param4 empty in the CreateThread method then the cursor will operate as normal while the threads are running. However, then you won't get updates to the form. &lt;br&gt;
&lt;br&gt;
The problem revolves around the MsgWaitForMultipleObjects(this.nThreads, this.cThreadHandles, 1, 5, QS_ALLINPUT) win32API function in the WaitForThreads method in the threads class. The fourth parameter helps in making the form more responsive while updates to the form are going on, but, I wasn't able to get it to the point where the cursor is showing up in the text box (although typing in the textbox still works). Any help here would be greatly appreciated.&lt;br&gt;
&lt;br&gt;
&amp;gt; Initial testing.&lt;br&gt;
&amp;gt; &lt;b&gt;While threads are running &lt;/b&gt;&lt;br&gt;
&amp;gt; 1. You can type in the edit box but the cursor disappears.&lt;br&gt;
&amp;gt; 2. If you try to scroll the grid you get an error:&lt;br&gt;
&amp;gt; Property REFRGRID not found. If no threads then scroll is ok.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Bernard&lt;br&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Sun, 22 Jun 2008 11:11:53 GMT</pubDate><guid isPermaLink="false">New Post: MTmyVFP3 issues 20080622111153A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=25</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;blah&amp;quot;,&amp;quot;form1.threadlogdone&amp;quot;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread&lt;br /&gt;Param 2 - any parameter you want to pass to your code&lt;br /&gt;Param 3 - code that will run when your thread completes&lt;br /&gt;Param 4 - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;--------&lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Sat, 21 Jun 2008 10:26:31 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080621102631A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=24</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;blah&amp;quot;,&amp;quot;form1.threadlogdone&amp;quot;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread(s)&lt;br /&gt;Param 2 - any parameter you want to pass to your code&lt;br /&gt;Param 3 - code that will run when your thread(s) completes&lt;br /&gt;Param 4 - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;--------&lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Fri, 20 Jun 2008 21:30:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080620093014P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=23</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;blah&amp;quot;,&amp;quot;form1.threadlogdone&amp;quot;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread(s)&lt;br /&gt;Param 2 - any parameter you want to pass to your code&lt;br /&gt;Param 3 - code that will run when your thread(s) completes&lt;br /&gt;Param 4 - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx" class="externalLink"&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Fri, 20 Jun 2008 21:29:18 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080620092918P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=22</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;blah&amp;quot;,&amp;quot;form1.threadlogdone&amp;quot;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread(s)&lt;br /&gt;Param 2 - any parameter you want to pass to your code&lt;br /&gt;Param 3 - code that will run when your thread(s) completes&lt;br /&gt;Param 4 - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt; &lt;br /&gt;Calvin Hsia's original source and background info:&lt;br /&gt;http://blogs.msdn.com/calvin_hsia/archive/2006/05/23/605465.aspx&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Fri, 20 Jun 2008 21:28:13 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080620092813P</guid></item><item><title>RELEASED: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008)</title><link>http://www.codeplex.com/mtmyvfp/Release/ProjectReleases.aspx?ReleaseId=14467</link><description>&lt;div&gt;
Examples of how to use this remarkable class from Calvin Hsia.  &lt;br&gt; &lt;br&gt;Gotchas:&lt;br&gt; &lt;br&gt;1.) If you're getting a COM error message, your code is not properly setup to run as a thread.  The best thing to do is to use the two existing examples (MyThreadFunc.prg and backprint.prg) as a template for your own thread code. *** Important: if you get stuck with a scrolling message saying &amp;quot;waiting for threads in Destroy....&amp;quot;, just press the &amp;lt;ESC&amp;gt; key to exit.***&lt;br&gt; &lt;br&gt;2.) Normal error messages will come from your thread code and have the line number of the error as well as a descriptive message.&lt;br&gt; &lt;br&gt;3.) 'File access denied' errors in your thread code - make sure all tables are opened Shared explicitly.&lt;br&gt; &lt;br&gt;Deployment Notes:&lt;br&gt;Just copy over the MtmyVFP3 folder or your new application folder that uses the thread class.  The only other things you need to do are:&lt;br&gt;1.) regsvr32 T1.dll (the vfp thread server mtdll)&lt;br&gt;2.) regsvr32 printserver.exe (if you are doing background printing)&lt;br&gt;
&lt;/div&gt;</description><author></author><pubDate>Fri, 20 Jun 2008 20:22:02 GMT</pubDate><guid isPermaLink="false">RELEASED: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008) 20080620082202P</guid></item><item><title>UPDATED RELEASE: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008)</title><link>http://www.codeplex.com/mtmyvfp/Release/ProjectReleases.aspx?ReleaseId=14467</link><description>&lt;div&gt;
Examples of how to use this remarkable class from Calvin Hsia.  &lt;br&gt; &lt;br&gt;Gotchas:&lt;br&gt; &lt;br&gt;1.) If you're getting a COM error message, your code is not properly setup to run as a thread.  The best thing to do is to use the two existing examples (MyThreadFunc.prg and backprint.prg) as a template for your own thread code. *** Important: if you get stuck with a scrolling message saying &amp;quot;waiting for threads in Destroy....&amp;quot;, just press the &amp;lt;ESC&amp;gt; key to exit.***&lt;br&gt; &lt;br&gt;2.) Normal error messages will come from your thread code and have the line number of the error as well as a descriptive message.&lt;br&gt; &lt;br&gt;3.) 'File access denied' errors in your thread code - make sure all tables are opened Shared explicitly.&lt;br&gt; &lt;br&gt;Deployment Notes:&lt;br&gt;Just copy over the MtmyVFP3 folder or your new application folder that uses the thread class.  The only other things you need to do are:&lt;br&gt;1.) regsvr32 T1.dll (the vfp thread server mtdll)&lt;br&gt;2.) regsvr32 printserver.exe (if you are doing background printing)&lt;br&gt;
&lt;/div&gt;</description><author></author><pubDate>Fri, 20 Jun 2008 20:22:02 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008) 20080620082202P</guid></item><item><title>UPDATED RELEASE: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008)</title><link>http://www.codeplex.com/mtmyvfp/Release/ProjectReleases.aspx?ReleaseId=14467</link><description>&lt;div&gt;
Examples of how to use this remarkable class from Calvin Hsia.  &lt;br&gt; &lt;br&gt;Gotchas:&lt;br&gt; &lt;br&gt;1.) If you're getting a COM error message, your code is not properly setup to run as a thread.  The best thing to do is to use the two existing examples (MyThreadFunc.prg and backprint.prg) as a template for your own thread code. *** Important: if you get stuck with a scrolling message saying &amp;quot;waiting for threads in Destroy....&amp;quot;, just press the &amp;lt;ESC&amp;gt; key to exit.***&lt;br&gt; &lt;br&gt;2.) Normal error messages will come from your thread code and have the line number of the error as well as a descriptive message.&lt;br&gt; &lt;br&gt;3.) 'File access denied' errors in your thread code - make sure all tables are opened Shared explicitly.&lt;br&gt; &lt;br&gt;Deployment Notes:&lt;br&gt;Just copy over the MtmyVFP3 folder or your new folder that uses the thread class.  The only other things you need to do are:&lt;br&gt;1.) regsvr32 T1.dll (the vfp thread server mtdll)&lt;br&gt;2.) regsvr32 printserver.exe (if you are doing background printing)&lt;br&gt;
&lt;/div&gt;</description><author></author><pubDate>Fri, 20 Jun 2008 20:21:00 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008) 20080620082100P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=21</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;blah&amp;quot;,&amp;quot;form1.threadlogdone&amp;quot;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread(s)&lt;br /&gt;Param 2 - any parameter you want to pass to your code&lt;br /&gt;Param 3 - code that will run when your thread(s) completes&lt;br /&gt;Param 4 - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Fri, 20 Jun 2008 20:19:33 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080620081933P</guid></item><item><title>UPDATED RELEASE: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008)</title><link>http://www.codeplex.com/mtmyvfp/Release/ProjectReleases.aspx?ReleaseId=14467</link><description>&lt;div&gt;
Examples of how to use this remarkable class from Calvin Hsia.  &lt;br&gt; &lt;br&gt;Gotchas:&lt;br&gt; &lt;br&gt;1.) If you're getting a COM error message, your code is not properly setup to run as a thread.  The best thing to do is to use the two existing examples (MyThreadFunc and backprint) as a template for your own thread code. *** Important: if you get stuck with a scrolling message saying &amp;quot;waiting for threads in Destroy....&amp;quot;, just press the &amp;lt;ESC&amp;gt; key to exit.***&lt;br&gt; &lt;br&gt;2.) Normal error messages will come from your thread code and have the line number of the error as well as a descriptive message.&lt;br&gt; &lt;br&gt;3.) 'File access denied' errors in your thread code - make sure all tables are opened Shared explicitly.&lt;br&gt; &lt;br&gt;Deployment Notes:&lt;br&gt;Just copy over the MtmyVFP3 folder or your new folder that uses the thread class.  The only other things you need to do are:&lt;br&gt;1.) regsvr32 T1.dll (the vfp thread server mtdll)&lt;br&gt;2.) regsvr32 printserver.exe (if you are doing background printing)&lt;br&gt;
&lt;/div&gt;</description><author></author><pubDate>Fri, 20 Jun 2008 20:18:40 GMT</pubDate><guid isPermaLink="false">UPDATED RELEASE: MTmyVFP 3.0 (Calvin Hsia's Multi-Threading Class) (Jun 20, 2008) 20080620081840P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/mtmyvfp/Wiki/View.aspx?title=Home&amp;version=20</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;MTmyVFP Version 3 - Project Home Page&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Requires VFP 9 (but could probably easily be modified to work in earlier versions). MTmyVFP is written completely in FoxPro and all source code is included.&lt;br /&gt; &lt;br /&gt;Test and use the examples in the included simple form, or, just create and run from the foxpro command window:&lt;br /&gt;&amp;lt;make sure you're in whatever directory you installed to&amp;gt;&lt;br /&gt; &lt;br /&gt;oThreadMgr=NEWOBJECT(&amp;quot;ThreadManager&amp;quot;,&amp;quot;threads.fxp&amp;quot;)&lt;br /&gt; &lt;br /&gt;oThreadMgr.CreateThread(&amp;quot;MyThreadFunc&amp;quot;,&amp;quot;blah&amp;quot;,&amp;quot;form1.threadlogdone&amp;quot;,&amp;quot;form1.processing&amp;quot;)&lt;br /&gt;Param 1 - the code that will run in a background thread(s)&lt;br /&gt;Param 2 - any parameter you want to pass to your code&lt;br /&gt;Param 3 - code that will run when your thread(s) completes&lt;br /&gt;Param 4 - code that will run in the foreground while your thread is processing (you could probably add a progress bar here like the one in ctl32_progressbar in VFPX)&lt;br /&gt; &lt;br /&gt;Other methods:&lt;br /&gt;oThreadMgr.SendMsgToStopThreads() - stop the threads&lt;br /&gt;oThreadMgr.SuspendThreads() - pause the threads&lt;br /&gt;oThreadMgr.ResumeThreads() - resume the threads&lt;br /&gt;
&lt;/div&gt;</description><author>claudefox</author><pubDate>Fri, 20 Jun 2008 16:41:55 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080620044155P</guid></item><item><title>Project License Changed</title><link>http://www.codeplex.com/mtmyvfp/license?LicenseHistoryId=8904</link><description>Copyright &amp;#40;c&amp;#41; 2008, dotComSolution and Claude Fox&amp;#13;&amp;#10;All rights reserved.&amp;#13;&amp;#10;&amp;#13;&amp;#10;Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met&amp;#58;&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#42; Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#42; Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and&amp;#47;or other materials provided with the distribution.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#42; Neither the name of dotComSolution or Claude Fox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.&amp;#13;&amp;#10;&amp;#13;&amp;#10;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;#34;AS IS&amp;#34; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES &amp;#40;INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES&amp;#59; LOSS OF USE, DATA, OR PROFITS&amp;#59; OR BUSINESS INTERRUPTION&amp;#41; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT &amp;#40;INCLUDING NEGLIGENCE OR OTHERWISE&amp;#41; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</description><author></author><pubDate>Tue, 12 Feb 2008 21:41:10 GMT</pubDate><guid isPermaLink="false">Project License Changed 20080212094110P</guid></item><item><title>COMMENTED ISSUE: Shared Variables and Thread Synchronization (Locking)</title><link>http://www.codeplex.com/mtmyvfp/WorkItem/View.aspx?WorkItemId=14923</link><description>Hi Claude,&lt;br /&gt; &lt;br /&gt;This is some very ingenious code.  It took some thought to mix machine code injection with COM in order to dynamically execute VFP code on a seperate thread.  Ok granted, the code under the hood is a little messy to look at but the class is very simple to use.  The one problem I have is with thread communication and synchronization.  Unfortunately I do not read the machine &amp;#40;assembly&amp;#41; listings well and my understanding of the COM at this level needs some research on my part before I understand the detail.&lt;br /&gt; &lt;br /&gt;What I&amp;#39;m after is a richer Threading experience.  I was wondering whether I could make some feature requests to be given some thought.  These features would be a challenge as although it is great executing VFP code asynchronously its limited in its isolated space.  &lt;br /&gt; &lt;br /&gt;What am I getting at&amp;#63;  Well first, I&amp;#39;m not sure how you would share data during the ececution of the thread to and from the main thread.  I know parameters can be passed &amp;#40;great feature already&amp;#41; but is there any way we could use shared properties or some get&amp;#47;set methods on the class to share data after execution has started&amp;#63;  It would be good to abstract these variables in way to build in thread locking capabilities that both the main thread and running thread&amp;#40;s&amp;#41; could access.  Also it would be good to have Monitors.  The code does appear to have a thread wait method &amp;#40;Join equivilent&amp;#41; thats not used at the top level which is a shame.  Could this be implemented for thread-synchronization and could some form of monitor be implemented&amp;#63;   &lt;br /&gt; &lt;br /&gt;Thats quite a task I know and the memory sharing could be the most difficult job.  There would have to be some kind of wrapper around it and this could be used by the main thread and child thread&amp;#40;s&amp;#41; to get at this dynamically allocated shared heap memory.  This could be a class that allocates heap memory and custom structures to provide the locking mechanism.  I could look into this further and come back with some kind of suggestion but it will be the first time at this level &amp;#59;&amp;#41;  What do you think&amp;#63;&lt;br /&gt; &lt;br /&gt;I think i&amp;#39;m correct in saying a wait &amp;#40;thread synchronization&amp;#41; implementation should be a little easier.  A Join method could be implemented with the current code couldn&amp;#39;t it&amp;#63; The implementation of a Monitor would be a little tricky as I&amp;#39;m not sure how Waits&amp;#40;&amp;#41; are actually set&amp;#40;&amp;#41; , reset&amp;#40;&amp;#41; at the machine level.  Obviously the instructions would have be singular in nature wouldn&amp;#39;t they&amp;#63;  I don&amp;#39;t know how to write and read a lock in a way that does not cause a race condition&amp;#63;  I guess I could find our easy enough. &lt;br /&gt; &lt;br /&gt;Just some initial thoughts. . .&lt;br /&gt; &lt;br /&gt;Thanks&lt;br /&gt; &lt;br /&gt;Richard&lt;br /&gt;Comments: ** Comment from web user: claudefox ** &lt;p&gt;I&amp;#39;ll update MTmyVFP when I get a chance to contain the latest Threading class &amp;#40;now in VFPWebCrawler&amp;#41;.  I&amp;#39;ll attempt to make it backward compatible to VFP 7 or VFP 8.  I should be able to add the background printing example as well.&lt;/p&gt;</description><author>claudefox</author><pubDate>Fri, 25 Jan 2008 15:59:02 GMT</pubDate><guid isPermaLink="false">COMMENTED ISSUE: Shared Variables and Thread Synchronization (Locking) 20080125035902P</guid></item></channel></rss>