我怎么能得到行动,我在恢复后暂停我的线程(抱歉我的英文不好),我会用代码解释
function mythreadf(p:Pointer):DWORD stdcall;
var i:Integer;
begin
for i:=0 to 1000000 do begin
if myevent.WaitFor(INFINITE)=wrsignaled
then
begin
if Form1.RadioButton1.Checked then ShowMessage('Checked');
Form1.Label1.Caption:=IntToStr(i);
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我暂停和恢复我的线程使用resetevent和setevent后我通过点击resetevent按钮暂停我的线程,然后我检查radiobotton1后,再次使用setevent恢复我的线程.dont发送错误发生和应用程序关闭:(
任何人都可以在这个问题上帮助我
关于编辑1:错误图像 http://i49.tinypic.com/11r7nkn.jpg
直接在工作线程中访问VCL UI控件不是线程安全的(即使ShowMessage()不是线程安全的.直接使用Win32 API MessageBox()).各种不好的事情都可能发生,包括崩溃.您必须将UI访问权委托给主线程.为此,TThread类有一个Synchronize()方法.或者您可以使用您选择的任何其他线程间同步,例如使用SendMessage()将自定义消息发送到通过AllocateHWnd()或CreateWindow/Ex()在主线程中创建的隐藏窗口.
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |