在c#项目中碰到需要创建线程的问题,以前有写过vc多线程的程序,故写此文以作比较
一、VC的线程处理比较简单,常用的几个api线程处理函数:
1、HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
//形参lpStartAddress是线程开始运行的地址,也就是这个线程开始执行时代码所在函数的地址,这个函数必须是全局函数或者类的静态函数,其他形参不赘述。
DWORD SuspendThread(HANDLE hThread)//用于挂起指定线程
DWORD ResumeThread(HANDLE hThread)//将线程的挂起状态计数值减一
VOID ExitThread(DWORD dwExitCode)//线程自身完成终止执行操作
BOOL TerminateThread(HANDLE hThread ,DWORD dwExitCode)//强行终止某一线程的操作
2、线程的通讯
两种办法:定义全局变量,或者消息传递
3、线程同步,线程同步的意思是指同一时间内只能有一个线程对同一数据进行操作,操作完成后才交给另外一个线程。windows共设置了4种主要的同步对象用于协调线程间的同步:临界区,互斥量,信号量,和事件。其中用得最多的是事件同步方法,最常用的等待函数为:WaitForSingleObject
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。句柄我们可以设置为全局变量,方便其他线程控制。
二、c#的线程处理
c#的线程处理方法跟VC完全不一样,它有一个命名空间:System.Threading,提供了多线程的支持。
要开启一个新线程,需要以下的初始化:
ThreadStart startload = new ThreadStart( Load ); //线程起始设置:即每个线程都执行Load(),注意:Load()必须为不带有参数的方法
Thread oThread = new Thread( startload ); //实例化要开启的新类
前两部可以缩写为Thread oThread = new Thread(new ThreadStart(Load));
oThread.Start();//开启线程
本人刚开始接触c#的多线程编程,更多更全的资料请参考:http://blog.163.com/jance_/blog/static/10867272200861363656910/
http://hi.baidu.com/little%5Fgrass/blog/item/cec7dad32d0cf2d9a9ec9a22.html
http://hi.baidu.com/scenic/blog/item/142b18dbc2d0e967d1164e6b.html
里面写得很具体