var
  bCancel: boolean;procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to 100000 do
    if not bCancel then
    begin
      Caption := IntToStr(i);
      Application.ProcessMessages;
    end
    else begin
      bCancel := false;
      break;
    end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  bCancel := true;
end;

解决方案 »

  1.   

    Application.ProcessMessage;Button1ONClick
    begin
      A;
      Application.ProcessMessage;
      B;  
    end;如果是其它信号,如Event := TSimpleEvent.Create;
    则WaitFor函数
      

  2.   

    那如果我要等待一个特殊的事件发生怎么办?比如我要等待clientsocket的onread事件发生。
      

  3.   

    case WaitForSingleObject(ClientSocket1.Socket.SocketHandle, 100000) of
      //参数忘了
      //Single参数
      begin
        Socket有信号来,Read, Write, Close,
        用winsock.select判断
      end; 
      //TimeOut
      begin
        timeout...看你怎么做了。
      end;
      //上面的代码不行的话,那这样。
    var
      Event: THandle;
    begin
      if not SConnect.LockWinsock2 then
        raise Exception.Create('winsock2 dll not exists.');
      Event := WSACreateEvent;  //Create NetWork Event;
      WSAEventSelect(ClientSocket1.Socket.Socket.Handle, Event, FD_READ or FD_CLOSE);  //参数不知少了没:)
      case WaitForSingleObject(Event, 100000) of
      ...//跟上面的一样了。
      
      //finally
      WSACloseEvent(Event); // Free Event.
    end;
      

  4.   

    to copy_paste:
      我现在写了event:=WSACreateEvent;调试的时候他报:WSACreateEvent is Undeclared.我应该如何声明呀?谢谢!马上给你加分!
      

  5.   

    uses SConnect;WSA...之类的函数都在SConnect单元定义,全局函数指针变量来的,名称不知我记错没:)
      

  6.   

    WSAEventSelect(ClientSocket1.Socket.SocketHandle, Event, FD_READ or FD_CLOSE);  //参数不知少了没:)
      //不是
      //case WaitForSingleObject(Event, 100000) of
      case MsgWaitForSingleObject(Event, 100000) of
      
      

  7.   

    uses winsock;
    我东忘西忘的,呵呵。