关于线程的参数、“返回值”、及线程的中止

关于线程的参数(2.0)、“返回值”、及线程的中止

1.线程的参数:
有时候会想向辅助线程传递些信息,这里需要用到ParameterizedThreadStart 委托

示例:

        private void btRunThread_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(new ParameterizedThreadStart(this.ThreadRun));
            t.Start(100);
        }
        private void ThreadRun(object o)
        {
            this.lbCompleted.Invoke((MethodInvoker)delegate { this.lbCompleted.Text = System.Convert.ToString(o); });
        }

2.通过代理可以大致实现类似功能,示例:

    class Program
    {
        static void Main(string[] args)
        {
            ThreadClass tc = new ThreadClass(new MyDlg(DlgMethod));
            Thread thread = new Thread(new ThreadStart(tc.ThreadRun));
            Console.WriteLine("second thread start");
            thread.Start();
            thread.Join();
            Console.WriteLine("second thread completed");
            Console.Read();
        }
        private static void DlgMethod(int i)
        {
            Console.WriteLine("Second Thread Result:{0}", i);
        }
    }
    public delegate void MyDlg(int i);
    class ThreadClass
    {
        private MyDlg myDlg;
        public ThreadClass(MyDlg pDlg)
        {
            this.myDlg = pDlg;
        }
        public void ThreadRun()
        {
            int total = 0;
            for (int i = 0; i < 100; i++)
            {
                total += i;
            }
            if (myDlg != null)
            {
                myDlg(total);
            }
        }
    }

3.线程的中止:

(1).join方法

MSDN注释:在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到某个线程终止为止。

看得一头雾,自己试了一下,似乎线程在调用join方法之后,该线程抢占了所有的cpu时间,直到线程的任务完成。不知道是这是这样?

(2).abort方法

立即中止线程

(3).定义标识量

示例:

    class Program
    {
        private static bool stop;
        static void Main(string[] args)
        {
            stop = false;
            Thread t = new Thread(new ThreadStart(ThreadRun));
            t.Start();
            Thread.Sleep(100);
            stop = true;
            Console.Read();
        }
        static void ThreadRun()
        {
            while (!stop)
            {
                Console.WriteLine("Do Some Work...");
            }
        }
    }

时间: 2024-11-10 00:15:52

关于线程的参数、“返回值”、及线程的中止的相关文章

Java线程:新特征-有返回值的线程

在Java5之前,线程是没有返回值的,常常为了"有"返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口. 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了. 下面是个很简单的例子: import java.util.concurrent.*

MFC多线程并发怎么按照线程顺序输出返回值?

问题描述 MFC多线程并发怎么按照线程顺序输出返回值? 多线程MFC程序,并发执行后分别按照顺序来返回结果,主线程接收这些返回值并且输出.显示,怎么做? 解决方案 你可以用信号量,让主线程等待子线程完成,用WaitForMultipleObjects WaitForSingleObjects函数 解决方案二: 可以用事件做线程同步.

c-一个有关sort函数第三个参数返回值的疑问

问题描述 一个有关sort函数第三个参数返回值的疑问 #include #include #include using namespace std; const int maxsize = 1000; struct stu{ char name[100]; int age; int score; }; bool cmp(stu a,stu b) { if(a.score < b.score) return true; int temp = strcmp(a.name,b.name); if(te

Sql Server 存储过程调用存储过程接收输出参数返回值

创建存储过程: ALTER PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax] FROM [Northwind].[dbo].[Customers] SET @row

关于存储过程的ADO调用的一些心得(输出参数,返回值)

ado|存储过程|心得 在一个项目中,我需要用到存储过程来访问数据,为了提供一个比较一致的接口以便调用,我没有使用CreateParameter(),而是调用CommandPtr的Refresh()函数先从数据库中查询参数._ConnectionPtr m_pConn;m_pConn.CreateInstance(__uuidof(Connection));m_pConn->Open("driver={SQL Server};server=127.0.0.1;DATABASE=pub;UI

PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)_php技巧

本文实例讲述了PHP自定义函数用法.分享给大家供大家参考,具体如下: Demo1.php <?php //标准函数,内置函数 echo md5('123456'); echo '<br/>'; echo sha1('123456'); echo '阅谁问君诵,水落清香浮.'; ?> Demo2.php <?php //创建函数,不要跟系统的内置函数重名 //函数有个特性,必须调用,才可以执行 //无参数表示()里面是空的,无返回就是函数的程序里没有 return functi

C#参数返回值

问题描述 voidButton8Click(objectsender,EventArgse){stringb1="0";stringb2="0";fiox(b1,b2);textBox4.Text=b1+b2;}publicvoidfiox(stringa1,stringa2){a1="1";a2="2";}b1与b3返回还是0应该怎么写,谢谢 解决方案 解决方案二:refstringa1,refstringa2解决方案三:p

Javascript函数参数 返回值 调用例子

一,函数定义调用 Function(函数)类型实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具备属性和方法,由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. (1)典型的函数声明 function slide(arguments){ //...code } (2)以函数表达式的形式定义函数 var slide = function(arguments){ //...code } 虽然上面两种方式逻辑上是等价的,但是还是有点小区别: 区别一:例一中的函数

java线程的run()没有返回值怎么办?_java

用线程Thread执行一些方法后,需要判断执行是否成功. public void run() {} run( ) 方法返回值是空, 怎么办? 解决方法: Note 使用 call() 方法 Callable接口是 jdk 5 后新增的接口 代码: package com.example.thread; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import

深入Java线程管理(一):线程的实现方式

Java的线程实现方式一共有三种,继承Thread.实现Runable接口,实现Callable接口.不过实现Runnable接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法有返回值,可以声明抛出异常而已. 一. 继承Thread类创建线程类 1) 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务. 2) 创建Thread子类的实例,即创建了线程对象. 3) 调用线程对象的start()方法来启动该线程.