博文

如何在程序中互斥的操作数据库 (2006-05-30 13:21:00)

摘要:估计大多数人在写数据库相关的程序的时候,都是用一个数据库Connection。因此有时会遇到在程序并发操作数据库所造成的异常问题。解决这类问题,很多人都是在建立一个数据库连接,来分别操作;但是如果并发的数据库操作不知两个的时候,那前面所说得的方法就显得不是很实际。   其实,在程序中用一个数据库Connection很容易解决对数据库的互斥操作,大致的方法如下: 1.  首先,需要建立一个全局静态的互斥量;例如: using System.Threading;         private static Mutex m;   2.  修改原先操作数据库的部分,注意的是(数据库查询是不需要的):             if(m==null)                 m=new Mutex();               //Enter into mutex area             m.WaitOne();               //Execute sql command here               //Depart from mutex area             m.......

阅读全文(3306) | 评论:0

多线程编程技术 (2006-05-26 14:21:00)

摘要:传统的Visual Basic开发人员已经建立了同步应用程序,在这些程序中事务按顺序执行。尽管由于多个事务多多少少地同时运行使多线程应用程序效率更高,但是使用先前版本的Visual Basic很难建立这类程序。

  多线程程序是可行的,因为操作系统是多任务的,它有模拟同一时刻运行多个应用程序的能力。尽管多数个人计算机只有一个处理器,但是现在的操作系统还是通过在多个执行代码片断之间划分处理器时间提供了多任务。线程可能是整个应用程序,但通常是应用程序可以单独运行的一个部分。操作系统根据线程的优先级和离最近运行的时间长短给每一个线程分配处理时间。多线程对于时间密集型事务(例如文件输入输出)应用程序的性能有很大的提高。

  但是也有必须细心的地方。尽管多线程能提高性能,但是每个线程还是需要用附加的内存来建立和处理器时间来运行,建立太多的线程可能降低应用程序的性能。当设计多线程应用程序时,应该比较性能与开销。

多任务成为操作系统的一部分已经很久了。但是直到最近Visual Basic程序员才能使用无文档记录特性(undocumented)或者间接使用COM组件或者操作系统的异步部分执行多线程事务。.NET框架组件为开发多线程应用程序,在System.Threading名字空间中提供了全面的支持。

  本文讨论多线程的好处以及怎样使用Visual Basic .NET开发多线程应用程序。尽管Visual Basic .NET和.NET框架组件使开发多线程应用程序更容易,但是本文作了调整使其适合高级读者和希望从早期Visual Basic转移到Visual Basic .NET的开发人员。

  多线程处理的优点

  尽管同步应用程序易于开发,但是它们的性能通常比多线程应用程序低,因为一个新的事务必须等待前面的事务完成后才能开始。如果完成某个同步事务的时间比预想的要长,应用程序可能没有响应。多线程处理可以同时运行多个过程。例如,字处理程序能够在继续操作文档的同时执行拼写检查事务。因为多线程应用程序把程序分解为独立的事务,它们能通过下面的途径充分提高性能:

  l 多线程技术可以使程序更容易响应,因为在其它工作继续时用户界面可以保持激活。

  l 当前不忙的......

阅读全文(3496) | 评论:0

C#电子书下载地址(顶)(2006-05-26 13:37:00)

摘要:1、http://www.codepub.com/software/View-Software-2497.html 2、http://www.codepub.com/index.html......

阅读全文(7692) | 评论:1

关于使用线程始终检索数据库问题? (2006-05-26 13:18:00)

摘要:大家好:
  现在我想实现在打开应用程序主窗体时用线程来运行一个方法。。该方法就是不停的检索远程服务器,如果满足条件的则触发另外一个方法。。该功能类似于移动公司不停的在检索数据库,然后发送短信一样。
该检索从运行应用程序到应用程序关闭。。大家有什么好的方法吗 你可以写成线程类,然后把窗体的方法委托给线程即可
Sample code as follows: public delegate void InvokeFun( string sData );
public class clsThreadFun
{
    private InvokeFun myFunHandler;
    private yourForm pParent;
    public clsThreadFun( yourForm pMain, InvokeFun FunHandler )
    {
         pParent = pMain;
         myFunHandler = FunHandler;
     }
     public void ThreadFun()
     {
          //Do what you want here
          pParent.InvokeMethod( this.myFunHandler, new object[]{"Test"} );
      }
} ----Start su......

阅读全文(2220) | 评论:0

用委托 事件 异步 多线程 等方法写的一些程序 最好有注释 (2006-05-26 13:06:00)

摘要:using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data; namespace 异步委托和线程调用
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
#region 默认代码
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.ProgressBar progressBar1;
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;   public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();    //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   ......

阅读全文(3110) | 评论:0

].NET委托:一个C#睡前故事 [推荐](2006-05-26 13:04:00)

摘要:  .NET委托:一个C#睡前故事
英文版原作者:Chris Sells(www.sellsbrothers.com)
翻译:袁晓辉(www.farproc.com http://blog.csdn.net/uoyevoli) 紧耦合
从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺:无论何时,只要我的工作取得了一点进展我都会及时让你知道。彼得通过周期性地使用“带类型的引用”(原文为:“typed reference” 也就是delegate??)“回调”他的老板来实现他的承诺,如下:
class Worker {
    public void Advise(Boss boss) { _boss = boss; }
    public void DoWork() {
        Console.WriteLine(“工作: 工作开始”);
        if( _boss != null ) _boss.WorkStarted();         Console.WriteLine(“工作: 工作进行中”);
        if( _boss != null ) _boss.WorkProgressing();         Console.WriteLine("“工作: 工作完成”");
        if( _boss != null ) {
     ......

阅读全文(1793) | 评论:0

线程--借助 封装类 实现“线程调用带参方法”(示例下载) (2006-05-26 11:42:00)

摘要:(一).描述
      由于线程只能执行无参数方法. 有时候需要线程执行"带参数方法"
      此示例演示怎样借助封装类实现“线程调用带参方法”
(二).代码
   using System;
using System.Threading; namespace 借助封装类实现_线程调用带参方法_
{
 class Help
 {
  public int x = 0;  //乘数1
  public int y = 0;  //乘数2
  public int end = 0; //存放结果
 }
 class MyClass
 {  
  public static Help  myHelp = new Help();
       
          
  [STAThread]
  static void Main(string[] args)
  { 
            //给类的成员赋值
   myHelp.x = 5;
   myHelp.y = 10;                 
   
 &nbs......

阅读全文(1952) | 评论:0

线程--管理线程(使线程中止,暂停,挂起等)(示例下载) (2006-05-26 11:42:00)

摘要:(一).描述
   此示例演示怎样设置线程的状态(中止,暂停,挂起等)
(二).代码
   using System;
using System.Threading; namespace 管理线程_使线程中止_暂停_挂起等_

 //委托声明(函数签名)
 delegate string MyMethodDelegate();
 class MyClass
 {  
  public static void Method1()
  {
   //thread1.Abort();一句中的 Abort会引发异常System.Threading.ThreadAbortException,其异常作用,下面会讲解   
   try
   {
    int i;
    for(i=0;i<10;i++)
    {
     Console.WriteLine("Method1 at :" + i.ToString());  
     DelayTime(1);  //延长时间(模拟执行任务)
    }
   }
   catch(System.Threading.ThreadAbortException)
   {
    //注意一点,线程跳出此语句块后才终止。
    //这里可以写释放......

阅读全文(3965) | 评论:0

线程--分别用lock以及Interlocked和Monitor类实现线程的临界(2006-05-26 11:41:00)

摘要:(一).描述
   此示例演示分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)
(二).代码
   using System;
using System.Threading;
using System.Collections; namespace 加锁_实现临界区互斥操作_

 //委托声明(函数签名)
 delegate string MyMethodDelegate();  class MyClass
 {  
  private static ArrayList arrList = new ArrayList();
  private static int i = 0;
  
  public static void Add()
     {
   //方法一:用 lock 实现
//   lock(arrList)
//   {
//    arrList.Add(i.ToString());
//    i++;
//   }
   
   //方法二: 用Interlicked类实现
//   System.Threading.Interlocked.Increment(ref i);
//   arrList.Add(i.ToString());    //方法三: 用Monitor类实现
   try
   {
&......

阅读全文(3459) | 评论:0

线程--定制线程及设置和获取线程的优先级别(示例下载) (2006-05-26 11:40:00)

摘要:(一).描述
   此示例演示怎样定制一个线程,并且设置线程的主要属性和获取线程运行时的状态
(二).代码    using System;
using System.Threading;
namespace 定制线程
{
 //委托声明(函数签名)
 //delegate string MyMethodDelegate();
 class MyClass
 {  
  public static void Method1()
  {
   int i;
   for(i=0;i<10;i++)
   {
    Console.WriteLine("Method1 at :" + i.ToString());
    
    //当线程停止/失败或未启动时IsAlive值为:false,否则为:true;
    Console.WriteLine("    IsAlive is " + Thread.CurrentThread.IsAlive.ToString()+" ");    
               
    //是否是后台进程
    Console.WriteLine("    IsBackGround is " + Thread.CurrentThread.IsBackground.ToString(......

阅读全文(2601) | 评论:0