M maorui Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-09 #1 我在主界面设置了一个Start按钮,运行一些时间很长的Thread。 这时主界面的Stop/Suspend按钮都不可用。如何能够保持主界面可操作?
C cnsandboy Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-09 #2 在Thread里不时的调用application.processmessage试试。
任 任豆豆 Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-09 #5 Thread.Priority := TThreadPriority = (tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical);
Thread.Priority := TThreadPriority = (tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical);
M maorui Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-09 #6 上面的方法都不行。 我看了一下,似乎是TThread.Waitfor造成的。
M maorui Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-10 #7 改了一下程序,Application.ProcessMessage可以工作了。 但是又碰到新的麻烦。 主界面里面有个Memo控件,只要点住Scrollbar拖动,Thread就会停下来。这又该如何处理呢?
改了一下程序,Application.ProcessMessage可以工作了。 但是又碰到新的麻烦。 主界面里面有个Memo控件,只要点住Scrollbar拖动,Thread就会停下来。这又该如何处理呢?
M maorui Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-10 #9 start按钮和memo控件都在主界面上。 start会启动一些thread,并等待thread运行结束,最后在memo中显示thread运行结果。
M maorui Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-10 #11 怎么会没意义?可以并发处理事务。 现在麻烦的是主界面不敢操作。
兰 兰斯 Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-10 #12 多线程同时访问VCL没办法,可以在OnTerminate里面访问memo!
M maorui Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-10 #13 不是thread访问VCL,VCL访问都在Start里面。 另外,Thread怎么不能访问,只要保证Threadsafe就行。D7的Thread Demo就是这样的。
M maorui Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-12 #15 太长了~~~~~大致上是这样的: procedure TForm_Main.Btn_StartClick(Sender: TObject); begin workthread.create; workthread.waitfor; //程序在这里停下来了 //结果处理,往Memo写数据 workthread.free; end; procedure TForm_Main.Btn_StopClick(Sender: TObject); begin thread.Terminate; end; procedure TWorkThread.Execute; bagin while not Terminateddo begin //工作处理 Application.ProcessMessage; end; end; PorcessMessage现在有时有用,更多时候不管用。Form_Main界面死掉了。 没有死掉时候,只要拖动Memo控件的滚动条,workthread就停止运行。Memo控件仅仅记录结果,没有其他代码。
太长了~~~~~大致上是这样的: procedure TForm_Main.Btn_StartClick(Sender: TObject); begin workthread.create; workthread.waitfor; //程序在这里停下来了 //结果处理,往Memo写数据 workthread.free; end; procedure TForm_Main.Btn_StopClick(Sender: TObject); begin thread.Terminate; end; procedure TWorkThread.Execute; bagin while not Terminateddo begin //工作处理 Application.ProcessMessage; end; end; PorcessMessage现在有时有用,更多时候不管用。Form_Main界面死掉了。 没有死掉时候,只要拖动Memo控件的滚动条,workthread就停止运行。Memo控件仅仅记录结果,没有其他代码。