D drizzledu Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-15 #1 我的线程运行过程中需要人工识别一些数字或图片,故这时需要把这些数字或图片用一个窗体显示出来供人工选择,然后返回结果给线程继续运行
轻 轻舞肥羊 Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-15 #2 VCL可视控件不是线程安全的 所以,窗口一般都是放在主线程里的,用线程没必要
N nicai_wgl Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-15 #4 二楼是老人了,难得一见呵呵。 线程中最好不要直接涉及可视控件,不安全,调试也麻烦。 实在要用,通过消息让主线程来做,再返回值。 bBack := False; PostMessage(MainForm.Handle, WM_MYMESSAGE, Value1, Value2); while not bBackdo sleep(100); .....
二楼是老人了,难得一见呵呵。 线程中最好不要直接涉及可视控件,不安全,调试也麻烦。 实在要用,通过消息让主线程来做,再返回值。 bBack := False; PostMessage(MainForm.Handle, WM_MYMESSAGE, Value1, Value2); while not bBackdo sleep(100); .....
D drizzledu Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-16 #5 线程自己创建一个窗口,用完就free,不是很方便吗,而且流程也很清晰容易理解
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-20 #6 你就既然要等待用户输入完毕后才执行后面的,这本身就是个顺序的过程,干吗还要用线程? 我觉得应该是主进程显示输入窗口,输入完毕后关闭窗口启动再启动线程去处理输入
L luoyanqing119 Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-20 #7 DELPHI中的可视组件都不是线程安全的,还包括大部份的非可视类组件。因此在线程中与组件交互时最好用Synchrolize(交互的方法名)
D drizzledu Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-20 #8 to hs-kill 窗口输入是在线程运行一段时间后随机出现的,并不是一开始就出现
C cqwty Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-20 #9 to 楼主: 首先,第一个疑问是,你的这个程序需要用线程吗?因为涉及到用户的输入窗口,既然用到了这个,你不可能是多个线程同时执行吧,多线程一般都是用于需要多个线程同时执行,或者是在后台做一些功能处理之类的.如果需要用户输入数据,那就需要斟酌一下了. 第二,你为什么不用两个线程来处理呢?一个主线程,一个是子线程,子线程负责执行输入窗口出来之前的功能,而主线程负责全程,当子线程执行完毕之后,那就弹出输入窗口,等待数据输入,然后主线程就继续执行后面的部分了.
to 楼主: 首先,第一个疑问是,你的这个程序需要用线程吗?因为涉及到用户的输入窗口,既然用到了这个,你不可能是多个线程同时执行吧,多线程一般都是用于需要多个线程同时执行,或者是在后台做一些功能处理之类的.如果需要用户输入数据,那就需要斟酌一下了. 第二,你为什么不用两个线程来处理呢?一个主线程,一个是子线程,子线程负责执行输入窗口出来之前的功能,而主线程负责全程,当子线程执行完毕之后,那就弹出输入窗口,等待数据输入,然后主线程就继续执行后面的部分了.
D drizzledu Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-20 #10 to cqwty, 需要线程,而且是几百个线程,用户输入是在线程执行过程中随机产生的,具有不确定性 我现在暂时用Synchrolize提交给主线程处理,不过这个Synchrolize据说效率不高啊,有哪位富翁有更好的办法否?直接在线程内部开个窗口提供给用户输入
to cqwty, 需要线程,而且是几百个线程,用户输入是在线程执行过程中随机产生的,具有不确定性 我现在暂时用Synchrolize提交给主线程处理,不过这个Synchrolize据说效率不高啊,有哪位富翁有更好的办法否?直接在线程内部开个窗口提供给用户输入
L liyinwei Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-21 #11 var bWait: Boolean; procedure ShowForm1; var FMessage: TMsg; Timer: Integer; begin bWait := True; Form1.Show; PeekMessage(FMessage, 0, WM_USER, WM_USER, PM_NOREMOVE); Timer := SetTimer(0,1,1000,nil); //定时器设为1000毫秒 while (GetMessage(FMessage, 0, 0, 0) and bWait)do begin case FMessage.message of WM_TIMER: {Do Something}; end; DispatchMessage(FMessage); end; KillTimer(0,Timer); end; //在窗体的 OnDestroy 事件里 bWait := False;
var bWait: Boolean; procedure ShowForm1; var FMessage: TMsg; Timer: Integer; begin bWait := True; Form1.Show; PeekMessage(FMessage, 0, WM_USER, WM_USER, PM_NOREMOVE); Timer := SetTimer(0,1,1000,nil); //定时器设为1000毫秒 while (GetMessage(FMessage, 0, 0, 0) and bWait)do begin case FMessage.message of WM_TIMER: {Do Something}; end; DispatchMessage(FMessage); end; KillTimer(0,Timer); end; //在窗体的 OnDestroy 事件里 bWait := False;