线程学习手记

关键代码的使用

 

CRITICAL_SECTION g_cs;   //关键代码的
DWORD num;

void mainfun(void)
{
 	EnterCriticalSection(&g_cs);  //进入关键代码
	num++;
	printf("%d\n",num);
                    LeaveCriticalSection(&g_cs);  //
}
DWORD CALLBACK ThreadFun(LPVOID param)
{
		while(1)
		{
		mainfun();
		}
}
DWORD CALLBACK ThreadFun1(LPVOID param)
{
	while(1)
	{
	mainfun();
	}

}
int main(int argc, char* argv[])
{

	num=0;
	InitializeCriticalSection(&g_cs);  //关键代码初使化
	createThread(NULL,NULL,ThreadFun,NULL,0,&th1);
	createThread(NULL,NULL,ThreadFun1,NULL,0,&th2);
                     Sleep(20000);
                    deleteCiriticalSection(&g_cs);

	return 0;
}

用起来很简单就这样..就看用在哪里了..

事件内核对像,刚开始学编程的时候就碰到了!今天就把这个砌底的学习一下,


#include "windows.h"
#include "stdio.h"
HANDLE hevent1;
HANDLE hevent2;
DWORD CALLBACK threadfun1 (LPVOID  param)
{
	DWORD num=0;
	while(1)
	{
	WaitForSingleObject(hevent1,INFINITE);
	printf("Thread 1 Beging .....\n");
	printf("%d\n",num++);
	Sleep(500);
	if(num==10)
	{
		SetEvent(hevent2);  //开启线程二
		ResetEvent(hevent1);  //暂停本线程
		num=0;
	}

	}
}

DWORD CALLBACK threadfun2 (LPVOID param)
{
	  int i=0;
	  while(1)
	  {

	  WaitForSingleObject(hevent2,INFINITE);    //等待事件的发生


	  printf("thread 2 Beging ......\n");
	  Sleep(500);
	  printf("%d\n",i++);

	  if(i==10)
	  {
		  SetEvent(hevent1);  //开线程1
		  ResetEvent(hevent2); //暂停自己
		  i=0;
	  }

	  }
}

	void main()
 {

	hevent1 = createEvent(NULL , TRUE,1 , "GLEON");   //参数(3)为一创建就是通知状态
	hevent2 = createEvent(NULL , TRUE,0 , "GLEON1");   //
	createThread(NULL,0,threadfun1,NULL,0,NULL);
	SetEvent(hevent1);
	createThread(NULL,0,threadfun2,NULL,0,NULL);
	while(1)
	{
		Sleep(100000);
	}
	CloseHandle(hevent1);
	CloseHandle(hevent2);
 }

知识共享许可协议莿鸟栖草堂CFC4N 创作,采用 知识共享 署名-非商业性使用-相同方式共享(3.0未本地化版本)许可协议进行许可。基于http://www.cnxct.com上的作品创作。转载请注明转自:线程学习手记

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据