精华内容
下载资源
问答
  • 判断线程是否存在 71 begin 72 mytd := TMyThread. Create (True); 73 mytd.FreeOnTerminate := True; 74 mytd.Resume; 75 end ; 76 end ; 77 78 end . View Code  

    相关资料:
    http://www.delphitop.com/html/xiancheng/376.html

     

     1 unit Unit1;
     2 
     3 interface
     4 
     5 uses
     6   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
     7   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     8 
     9 type
    10   TMyThread = class(TThread)//自定义的线程
    11   protected
    12     procedure Execute; override;
    13   end;
    14 
    15   TForm1 = class(TForm)
    16     Button1: TButton;
    17     procedure Button1Click(Sender: TObject);
    18   private
    19     { Private declarations }
    20   public
    21     { Public declarations }
    22   end;
    23 
    24 var
    25   Form1: TForm1;
    26   mytd: TMyThread;//线程对像
    27 implementation
    28 
    29 {$R *.dfm}
    30 
    31 //返回值:0-已释放;1-正在运行;2-已终止但未释放;3-未建立或不存在
    32 function CheckThreadFreed(aThread: TThread): Byte;
    33 var
    34   I: DWord;
    35   IsQuit: Boolean;
    36 begin
    37   if Assigned(aThread) then
    38   begin
    39     IsQuit := GetExitCodeThread(aThread.Handle, I);
    40     if IsQuit then //If the function succeeds, the return value is nonzero.
    41     //If the function fails, the return value is zero.
    42     begin
    43       if I = STILL_ACTIVE then //If the specified thread has not terminated,
    44       //the termination status returned is STILL_ACTIVE.
    45       Result := 1
    46     else
    47       Result := 2; //aThread未Free,因为Tthread.Destroy中有执行语句
    48     end
    49     else
    50     Result := 0; //可以用GetLastError取得错误代码
    51   end
    52   else
    53   Result := 3;
    54 end;
    55 
    56 procedure TMyThread.Execute;
    57 var
    58  I: Integer;
    59 begin
    60   for I := 0 to 500000 do
    61   begin
    62     Form1.Canvas.Lock;
    63     Form1.Canvas.TextOut(10, 10, IntToStr(I));
    64     Form1.Canvas.Unlock;
    65   end;
    66 end;
    67 
    68 procedure TForm1.Button1Click(Sender: TObject);
    69 begin
    70   if CheckThreadFreed(mytd)<>1 then //判断线程是否存在
    71   begin
    72     mytd := TMyThread.Create(True);
    73     mytd.FreeOnTerminate := True;
    74     mytd.Resume;
    75   end;
    76 end;
    77 
    78 end.
    View Code

     

    展开全文
  • 如何判断线程运行结束

    千次阅读 2019-05-05 11:03:42
    如果是一个线程,可以使用此方法,多个不合适 2.CountDownLatch 此为并发计数器,每个线程结束后减一(countDown()),countDownLatch.await();//等待所有子线程执行完 3.线程池ThreadPoolExecutor的shutdown与...

    1.join()
    如果是一个线程,可以使用此方法,多个不合适
    2.CountDownLatch
    此为并发计数器,每个线程结束后减一(countDown()),countDownLatch.await();//等待所有子线程执行完

    3.线程池ThreadPoolExecutor的shutdown与awaitTermination方法

    executor.shutdown();//只是不能再提交新任务,等待执行的任务不受影响  
    
    try {  
            boolean loop = true;  
            do {    //等待所有任务完成  
                loop = !executor.awaitTermination(2, TimeUnit.SECONDS);  //阻塞,直到线程池里所有任务结束
            } while(loop);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        } 
    
    service.shutdown();  
    
    while(!service.awaitTermination(2, TimeUnit.SECONDS)){  
    
            System.out.println("service not stop"); 
    
        }  
    
    
    //或者isTerminated,如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。
    
    executor.shutdown();//只是不能再提交新任务,等待执行的任务不受影响  
    
    while(true){  
            if(exe.isTerminated()){ 
                System.out.println("所有的子线程都结束了!");  
                break;  
            }  
            Thread.sleep(1000);    
        }  
    

    ThreadPoolExecutor.getActiveCount() == 0 ?

    展开全文
  • 判断线程运行状态的两种方法

    千次阅读 2016-07-29 16:42:53
    判断线程运行状态的两种方法 判断线程运行状态的方法有很多,如可以采用类似于对象计数器的方法等等,那么这里向你介绍两种判断线程运行状态的方法,希望对你有所帮助。 AD:51CTO 网+ 第十二期沙龙:大话数据之...

    判断线程运行状态的两种方法

    判断线程运行状态的方法有很多,如可以采用类似于对象计数器的方法等等,那么这里向你介绍两种判断线程运行状态的方法,希望对你有所帮助。

    AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验

    判断线程运行状态的方法有很多,如可以采用类似于对象计数器的方法,所谓对象计数器,就是一个对象被引用一次,这个计数器就加1,销毁引用就减1,如果引用数为0,则垃圾搜集器就会对这些引用数为0的对象进行回收。

    判断线程运行状态方法一:线程计数器

    线程也可以采用计数器的方法,即为所有需要监视的线程设一个线程计数器,每开始一个线程,在线程的执行方法中为这个计数器加1,如果某个线程结束(在线程执行方法的最后为这个计数器减1),为这个计数器减1。然后再开始一个线程,按着一定的时间间隔来监视这个计数器,如是棕个计数器为0,说明所有的线程都结束了。当然,也可以不用这个监视线程,而在每一个工作线程的最后(在为计数器减1的代码的后面)来监视这个计数器,也就是说,每一个工作线程在退出之前,还要负责检测这个计数器。使用这种方法不要忘了同步这个计数器变量啊,否则会产生意想不到的后果。

    判断线程运行状态方法二:使用Thread.join方法

    join方法只有在线程结束时才继续执行下面的语句。可以对每一个线程调用它的join方法,但要注意,这个调用要在另一个线程里,而不要在主线程,否则程序会被阻塞的。

    个人感觉这种方法比较好。

    线程计数器方法演示:

    1. class ThreadCounter : MyThread  
    2. {  
    3. private static int count = 0;  
    4. private int ms;  
    5. private static void increment()  
    6. {  
    7. lock (typeof(ThreadCounter))  // 必须同步计数器  
    8. {  
    9. count++;  
    10. }  
    11. }  
    12. private static void decrease()  
    13. {  
    14. lock (typeof(ThreadCounter))  
    15. {  
    16. count--;  
    17. }  
    18. }  
    19. private static int getCount()  
    20. {  
    21. lock (typeof(ThreadCounter))  
    22. {  
    23. return count;  
    24. }  
    25. }  
    26. public ThreadCounter(int ms)  
    27. {  
    28. this.ms = ms;  
    29. }  
    30. override public void run()  
    31. {  
    32. increment();  
    33. Thread.Sleep(ms);  
    34. Console.WriteLine(ms.ToString()+"毫秒任务结束");  
    35. decrease();  
    36. if (getCount() == 0)  
    37. Console.WriteLine("所有任务结束");  
    38. }  
    39. }  
    40.  
    41.  
    42. ThreadCounter counter1 = new ThreadCounter(3000);  
    43. ThreadCounter counter2 = new ThreadCounter(5000);  
    44. ThreadCounter counter3 = new ThreadCounter(7000);  
    45.  
    46. counter1.start();  
    47. counter2.start();  
    48. counter3.start();  

    上面的代码虽然在大多数的时候可以正常工作,但却存在一个隐患,就是如果某个线程,假设是counter1,在运行后,由于某些原因,其他的线程并未运行,在这种情况下,在counter1运行完后,仍然可以显示出“所有任务结束”的提示信息,但是counter2和counter3还并未运行。为了消除这个隐患,可以将increment方法从run中移除,将其放到ThreadCounter的构造方法中,在这时,increment方法中的lock也可以去掉了。代码如:

    1. public ThreadCounter(int ms)  
    2. {  
    3. this.ms = ms;  
    4. increment();  

    运行上面的程序后,将显示如下图的结果。

    程序运行效果 

    使用Thread.join方法演示

    1. private static void threadMethod(Object obj)  
    2. {  
    3. Thread.Sleep(Int32.Parse(obj.ToString()));  
    4. Console.WriteLine(obj + "毫秒任务结束");  
    5. }  
    6. private static void joinAllThread(object obj)  
    7. {  
    8. Thread[] threads = obj as Thread[];  
    9. foreach (Thread t in threads)  
    10. t.Join();  
    11. Console.WriteLine("所有的线程结束");  
    12. }  
    13.  
    14. static void Main(string[] args)  
    15. {  
    16. Thread thread1 = new Thread(threadMethod);  
    17. Thread thread2 = new Thread(threadMethod);  
    18. Thread thread3 = new Thread(threadMethod);  
    19.  
    20.  thread1.Start(3000);  
    21.  thread2.Start(5000);  
    22.  thread3.Start(7000);  
    23.  
    24.  Thread joinThread = new Thread(joinAllThread);  
    25.  joinThread.Start(new Thread[] { thread1, thread2, thread3 });  
    26.  
    27. }  

    在运行上面的代码后,将会得到和图2同样的运行结果。上述两种方法都没有线程数的限制,当然,仍然会受到操作系统和硬件资源的限制。

    判断线程运行状态的两大方法就向你介绍到这里,希望对你了解和学习线程运行状态的判断有所帮助。

    展开全文
  • linux c++ 守护线程判断程序是否运行,不存在就启动
  • 判断线程是否释放

    2017-10-30 09:55:58
    /判断线程是否释放 //返回值:0-已释放;1-正在运行;2-已终止但未释放; //3-未建立或不存在 function TFrmMain.CheckThreadFreed(aThread: TThread): Byte; var i: DWord; IsQuit: Boolean; begin if Assigned(a...
    //以下资料来自大富翁论坛。/判断线程是否释放 //返回值:0-已释放;1-正在运行;2-已终止但未释放; //3-未建立或不存在 function TFrmMain.CheckThreadFreed(aThread: TThread): Byte; var i: DWord; IsQuit: Boolean; begin if Assigned(aThread) then begin IsQuit := GetExitCodeThread(aThread.Handle, i); if IsQuit then
     //If the function succeeds, the return value is nonzero. //If the function fails, the return value is zero. begin if i = STILL_ACTIVE then //If the specified thread has not terminated, //the termination status returned is STILL_ACTIVE. Result := 1 else Result
     := 2; //aThread未Free,因为Tthread.Destroy中有执行语句 end else Result := 0; //可以用GetLastError取得错误代码 end else Result := 3; end;
    
    展开全文
  • 如何判断线程是否都结束了

    万次阅读 2019-02-25 14:34:29
    方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态。 线程启动后,只要没有运行完毕,都会返回true。 【注】如果只是要等其他线程运行结束之后再继续操作,可以执行t.join(),即:t执行完毕前挂起...
  • C# 判断线程是否结束Alive

    千次阅读 2019-02-15 22:07:45
    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ...namespace _5006_判断线程是否结束Alive { class UsingIsAlive ...
  • 摘要: 当任务量较大时,我们需要开启线程执行任务,但是... 判断线程是否全部执行完毕(CountDownLatch) CountDownLatch示例 1.线程池 开启线程的方法有很多: 1.spring管理的ThreadPoolTaskExecutor线程池 2...
  • pthread 使用笔记2 判断线程是否存在

    千次阅读 2016-12-20 11:03:45
    1.一种自己立标志的方法,建立一个子线程是否结束的标志位,子线程中结束的位置上把标志位置位,父线程通过判断标志位的值来判断线程是否已经退出,为了保证父线程处理的时间子线程已经退出完毕,父线程判断子...
  • C#中如何判断线程当前所处的状态

    万次阅读 多人点赞 2014-11-20 16:53:59
    C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象,因此判断线程当前的状态必须用bitmask按位运算来达到判断目的,不能直接使用相等来判断。
  • * isAlive() 判断线程是否还活着 * setName() 给线程起一个名字 * getName() 获取线程名字 * currentThread() 取得当前正在运行的线程对象,也就是获取自己本身 * @author pmc * */ public class Test { ...
  • isAlive( ) 方法是用来判断线程是否启动的方法。它的返回值是布尔型,启动为true,没启动为false。下面的代码说明了isAlive的使用方法:public class demoisAlive extends Thread{ //创建线程类 public void run()...
  • C# 中如何判断线程是否结束

    千次阅读 2011-02-25 12:29:06
    可喜的是微软提供了我们这样一个方法,IsAlive()其判断线程是否在运行状态,所以我们可以循环中一直判断这个标识,等该线程结束后,退出线程。而我们的程序执行过程中,可能又要判断是否...
  • 判断线程是否结束的方法

    千次阅读 2013-03-18 16:12:48
    原文链接:判断线程是否结束的方法 1、 GetExitCodeThread  比较原始的方法了,调用 GetExitCodeThread,如果返回STILL_ACTIVE,那就是还在运行,否则,会返回退出代码.  该方法的优点是除了可以判断...
  • 判断当前线程是否UI线程

    千次阅读 2017-11-20 11:23:08
    两种方法: 1.if (Thread.currentThread() == Looper.getMainLooper().getThread()) { // UI线程 } else { // 非UI线程 } 2.if (Looper.myLooper() == Looper.getM
  • 判断线程是否已经结束

    千次阅读 2019-04-07 16:50:06
    一代码 #include <iostream> #include <pthread.h> #include <signal.h> #include <unistd.h> //sleep #include "errno.h" ...void *thfunc(void *arg) // 线程函数...
  • 如何检查后台服务(Android的Service类)是否正在运行?我希望我的Activity能够显示Service的状态,然后我可以打开或者关闭它。   回答: Android系统提供了一个函数ActivityManager.getRunningServices...
  • Java判断线程是否结束

    千次阅读 2019-03-10 08:35:14
    JAVA判断线程是否结束应用场景主要方法实现代码 应用场景 程序中需要等待多线程任务全部执行完毕后,再执行后续操作。 主要方法 使用方法 1、确定了你开启的线程数,那么主程序运行前。 CountDownLatch ...
  • MFC 判断线程是否结束

    千次阅读 2013-04-14 11:32:18
    功能: 获取一个结束线程的返回值 函数原形: BOOL GetExitCodeThread( HANDLE hThread, LPDWORD lpExitCode); 参数: hThread 指向欲获取返回值的线程对象的句柄  lpExitCode 用于存储线程的返回值...
  • 方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态。 线程启动后,只要没有运行完毕,都会返回true。 【注】如果只是要等其他线程运行结束之后再继续操作,可以执行t.join(),即:t执行完毕前挂起...
  • Tread类中提供了两种方法来判断线程的状态是不是停止的。 this.interrupted():测试当前线程是否已经中断。this.isInterrupted():测试线程是否已经中断。 1)interrupted()方法:  interrupted()方法是静态的...
  • java中判断线程是否是停止状态

    千次阅读 2017-11-18 13:30:02
    (1)this.interrupted():测试当前线程是否已经中断。 (2)this.isInterrupted():测试线程是否已经中断。 interrupted()方法声明如下; public static boolean interrupted() isInterrupted()方法声明如下: ...
  • delphi中如何判断线程终止

    千次阅读 2010-08-29 00:25:00
    能不能判断线程的状态,是运行,还是挂起呀?怎样得知线程结束了? 我做了一个线程队列,用队列管理线程,可是无法得知哪个线程是否结束了,然后让结束了的线程重新启动? Obj: TQueryThread 用...
  • 多线程学习笔记——判断线程状态

    千次阅读 2017-07-27 09:38:22
    C#多线程状态判断http://blog.csdn.net/deandingding/article/details/39762489 C#多线程有很多值得学习的地方,这里我们主要介绍C# ThreadState属性,包括介绍主线程Main()函数和线程的优先级等方面。 主线程Main...
  • C#中如何判断当前线程是否为主线程

    千次阅读 2016-11-25 16:44:21
    转自:C#中如何判断当前线程是否为主线程 / Do this when you start your application static int mainThreadId; // In Main method: mainThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 432,285
精华内容 172,914
关键字:

判断线程是否在运行