function ThreadFunc(...): Boolean; stdcall;
var
...
begin
  // 把你需要在线程中单独运行的程序放在此处
end;procedure TForm1.Button1Click(Sender: TObject);
var
  hThread: THandle;
  ThreadID: DWORD;
begin
  hThread := CreateThread(nil,
                          0,
                          @ThreadFunc,
                          nil,
                          0,
                          ThreadID);
  if hThread = 0 then
    MessageBox(Self.Handle, PChar('线程创建错误'), nil, MB_OK);
end;// 不是很明白你的意思,给你最简单的例子.

解决方案 »

  1.   

    大哥,你用的是什么时候的pascal语言啊?其实很简单!
    我觉得这里不用调用api函数的,delphi自己可以搞定的!
      

  2.   

    把检测断口写成一个函数,放在thread.excute事件里就可以了
      

  3.   

    可以使用:
    WaitForSingleObject(hThread, TimeToWait);    // 当hThread句柄指向的线程运行结束时返回。先开50个管理线程,这50个线程不用于执行端口扫描。然后再每一个线程里再开一个端口扫描线程,使用WaitForSingleObject()函数判断端口扫描线程是否返回,若返回则开下一批端口扫描线程。function ThreadSearch(...): VariableType; stdcall;function ThreadFunc(...): Boolean; stdcall;
    var
      hSearchThread: THandle;
      dwSearchThreadID: DWORD;
      iCount: Integer;            // 也可以使用其他可表示本管理线程结束的标志
    begin
      iCount := 0;
      while iCount<=49 do
      begin
        hSearchThread := CreateThread(nil, 0, @ThreadSearCh, nil, 0, dwSearchThreadID);
        WaitForSingleObject(hSearchThread, TimeToWait);
        Inc(iCount, 1);  // iCount + 1;
      end;//while
    end;//===========Main=======================
    var
      hMasterThread: array[0..49] of THandle;
      dwThreadID: array[0..49] of DWORD;
    begin
      for i := 0 to 49 do
      begin
        hMasterThread[i] := CreateThread(nil, 0, @ThreadFunc, nil, 0, dwThreadID[i]);
      end;//for
    end;
    // 以上的代码很可能是错误的,你自己多试试。// 他们说留言太长了,所以放到帖子里来了。