当前位置: 首页 > news >正文

建网站要注意的细节上海有名网站建站开发公司

建网站要注意的细节,上海有名网站建站开发公司,织梦修改网站后备份,上线了做网站怎么查看线程是进程中的一个实体,是被系统独立调度和分派的基本单位。一个进程可以拥有多个线程,但是一个线程必须有一个进程。线程自己不拥有系统资源,只有运行所必须的一些数据结构,但它可以与同属于一个进程的其它线程共享进程所拥有的…

线程是进程中的一个实体,是被系统独立调度和分派的基本单位。一个进程可以拥有多个线程,但是一个线程必须有一个进程。线程自己不拥有系统资源,只有运行所必须的一些数据结构,但它可以与同属于一个进程的其它线程共享进程所拥有的全部资源,同一个进程中的多个线程可以并发执行。

在C/C++中可以通过CreateThread函数在进程中创建线程,函数的具体格式如下:

[cpp] view plain copy
  1. HANDLE CreateThread(  
  2.                     LPSECURITY_ATTRIBUTES lpThreadAttributes,  
  3.                     DWORD dwStackSize,  
  4.                     LPTHREAD_START_ROUTINE lpStartAddress,  
  5.                     LPVOID lpParameter,  
  6.                     DWORD dwCreationFlags,  
  7.                     LPDWORD lpThreadID  
  8.                    );  
参数的含义如下:

lpThreadAttrivutes:指向SECURITY_ATTRIBUTES的指针,用于定义新线程的安全属性,一般设置成NULL;

dwStackSize:分配以字节数表示的线程堆栈的大小,默认值是0;

lpStartAddress:指向一个线程函数地址。每个线程都有自己的线程函数,线程函数是线程具体的执行代码;

lpParameter:传递给线程函数的参数;

dwCreationFlags:表示创建线程的运行状态,其中CREATE_SUSPEND表示挂起当前创建的线程,而0表示立即执行当前创建的进程;

lpThreadID:返回新创建的线程的ID编号;

如果函数调用成功,则返回新线程的句柄,调用WaitForSingleObject函数等待所创建线程的运行结束。函数的格式如下:

[cpp] view plain copy
  1. DWORD WaitForSingleObject(  
  2.                           HANDLE hHandle,  
  3.                           DWORD dwMilliseconds  
  4.                          );  
参数的含义如下:

hHandle:指定对象或时间的句柄;

dwMilliseconds:等待时间,以毫秒为单位,当超过等待时间时,此函数返回。如果参数设置为0,则该函数立即返回;如果设置成INFINITE,则该函数直到有信号才返回。

一般情况下需要创建多个线程来提高程序的执行效率,但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对一个内存地址进行写入操作,由于CPU时间调度的问题,写入的数据会被多次覆盖,所以要使线程同步。

就是说,当有一个线程对文件进行操作时,其它线程只能等待。可以通过临界区对象实现线程同步。临界区对象是定义在数据段中的一个CRITICAL_SECTION结构,Windows内部使用这个结构记录一些信息,确保同一时间只有一个线程访问改数据段中的数据。

使用临界区的步骤如下:

(1)初始化一个CRITICAL_SECTION结构;在使用临界区对象之前,需要定义全局CRITICAL_SECTION变量,在调用CreateThread函数前调用InitializeCriticalSection函数初始化临界区对象;

(2)申请进入一个临界区;在线程函数中要对保护的数据进行操作前,可以通过调用EnterCriticalSection函数申请进入临界区。由于同一时间内只能有一个线程进入临界区,所以在申请的时候如果有一个线程已经进入临界区,则该函数就会一直等到那个线程执行完临界区代码;

(3)离开临界区;当执行完临界区代码后,需要调用LeaveCriticalSection函数离开临界区;

(4)删除临界区;当不需要临界区时调用DeleteCriticalSection函数将临界区对象删除;

下面的代码创建了5个线程,每个线程在文件中写入10000个“hello”:

[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <windows.h>  
  3. HANDLE hFile;  
  4. CRITICAL_SECTION cs;//定义临界区全局变量  
  5. //线程函数:在文件中写入10000个hello  
  6. DWORD WINAPI Thread(LPVOID lpParam)  
  7. {  
  8.     int n = (int)lpParam;  
  9.     DWORD dwWrite;  
  10.     for (int i = 0;i < 10000;i++)  
  11.     {  
  12.         //进入临界区  
  13.         EnterCriticalSection(&cs);  
  14.         char data[512] = "hello\r\n";  
  15.         //写文件  
  16.         WriteFile(hFile, data, strlen(data), &dwWrite, NULL);  
  17.         //离开临界区  
  18.         LeaveCriticalSection(&cs);  
  19.     }  
  20.     printf("Thread #%d returned successfully\n", n);  
  21.     return 0;  
  22. }  
  23. int main()  
  24. {  
  25.     char *filename = "hack.txt";  
  26.     WCHAR name[20] = { 0 };  
  27.     MultiByteToWideChar(CP_ACP, 0, filename, strlen(filename) + 1, name, sizeof(name) / sizeof(name[0]));  
  28.     //创建文件  
  29.     hFile = CreateFile(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);  
  30.     if (hFile == INVALID_HANDLE_VALUE)  
  31.     {  
  32.         printf("CreateFile error.\n");  
  33.         return 0;  
  34.     }  
  35.     DWORD ThreadID;  
  36.     HANDLE hThread[5];  
  37.     //初始化临界区  
  38.     InitializeCriticalSection(&cs);  
  39.     for (int i = 0;i < 5;i++)  
  40.     {  
  41.         //创建线程,并调用Thread写文件  
  42.         hThread[i] = CreateThread(NULL, 0, Thread, (LPVOID)(i + 1), 0, &ThreadID);  
  43.         printf("Thread #%d has been created successfully.\n", i + 1);  
  44.     }  
  45.     //等待所有进程结束  
  46.     WaitForMultipleObjects(5, hThread, TRUE, INFINITE);  
  47.     //删除临界区  
  48.     DeleteCriticalSection(&cs);  
  49.     //关闭文件句柄  
  50.     CloseHandle(hFile);  
  51.     return 0;  


文章转载自:
http://dorsal.jqLx.cn
http://gallica.jqLx.cn
http://thumbhole.jqLx.cn
http://yieldance.jqLx.cn
http://caressingly.jqLx.cn
http://altissimo.jqLx.cn
http://unanimously.jqLx.cn
http://pentolite.jqLx.cn
http://concuss.jqLx.cn
http://moundsman.jqLx.cn
http://catamite.jqLx.cn
http://laundress.jqLx.cn
http://teller.jqLx.cn
http://undecagon.jqLx.cn
http://temperately.jqLx.cn
http://inference.jqLx.cn
http://canned.jqLx.cn
http://exempt.jqLx.cn
http://expertizer.jqLx.cn
http://rheogoniometer.jqLx.cn
http://hawker.jqLx.cn
http://paleolimnology.jqLx.cn
http://compleat.jqLx.cn
http://crystal.jqLx.cn
http://peep.jqLx.cn
http://apodosis.jqLx.cn
http://rurally.jqLx.cn
http://surrebut.jqLx.cn
http://nymphomania.jqLx.cn
http://myleran.jqLx.cn
http://tempt.jqLx.cn
http://regelation.jqLx.cn
http://shebeen.jqLx.cn
http://traditionalistic.jqLx.cn
http://antagonise.jqLx.cn
http://thousand.jqLx.cn
http://impenetrability.jqLx.cn
http://rooted.jqLx.cn
http://cardiologist.jqLx.cn
http://unscientific.jqLx.cn
http://mizenyard.jqLx.cn
http://glumose.jqLx.cn
http://worshipless.jqLx.cn
http://aconitum.jqLx.cn
http://dubbing.jqLx.cn
http://orthodoxy.jqLx.cn
http://bacciform.jqLx.cn
http://cytotoxin.jqLx.cn
http://sprout.jqLx.cn
http://balladry.jqLx.cn
http://sw.jqLx.cn
http://buffer.jqLx.cn
http://theopathy.jqLx.cn
http://sojourn.jqLx.cn
http://unrenewable.jqLx.cn
http://garlandry.jqLx.cn
http://enfeeblement.jqLx.cn
http://microlens.jqLx.cn
http://nonprincipled.jqLx.cn
http://briareus.jqLx.cn
http://diphosphate.jqLx.cn
http://maggotry.jqLx.cn
http://servocontrol.jqLx.cn
http://insufferably.jqLx.cn
http://downcourt.jqLx.cn
http://rattan.jqLx.cn
http://merci.jqLx.cn
http://disbennifit.jqLx.cn
http://perlustrate.jqLx.cn
http://cyanocobalamin.jqLx.cn
http://gigahertz.jqLx.cn
http://keef.jqLx.cn
http://intersect.jqLx.cn
http://semiclassical.jqLx.cn
http://balopticon.jqLx.cn
http://smugness.jqLx.cn
http://hypercalcemia.jqLx.cn
http://podunk.jqLx.cn
http://tenaculum.jqLx.cn
http://illogically.jqLx.cn
http://aural.jqLx.cn
http://alm.jqLx.cn
http://moraine.jqLx.cn
http://immunogenesis.jqLx.cn
http://decade.jqLx.cn
http://insociable.jqLx.cn
http://hydropath.jqLx.cn
http://diploid.jqLx.cn
http://zinc.jqLx.cn
http://rudesheimer.jqLx.cn
http://albedometer.jqLx.cn
http://rdram.jqLx.cn
http://logomachist.jqLx.cn
http://cognizance.jqLx.cn
http://foredune.jqLx.cn
http://earned.jqLx.cn
http://psychoquack.jqLx.cn
http://hemosiderin.jqLx.cn
http://predaceous.jqLx.cn
http://hayseed.jqLx.cn
http://www.hrbkazy.com/news/70572.html

相关文章:

  • 深圳皇冠科技有限公司网站竞价托管服务公司
  • 某企业网站建设论文谷歌海外广告投放
  • 什么做网站的公司好免费网站建设制作
  • 教育局网站群建设方案外贸b2b平台都有哪些网站
  • 阿里云企业建站教程谷歌搜索引擎在线
  • 沈阳网站seo优化哪家好指数函数求导公式
  • 南昌市住房城乡建设委门户网站网站源码建站
  • 网站怎么做下载网页代码吗福州短视频seo服务
  • 专门做微场景的网站竞价托管推广
  • wordpress主题几个网站国内搜索引擎大全
  • wordpress科技模板湖北短视频搜索seo
  • 广告设计培训软件seo零基础培训
  • 有哪些做搞笑视频的网站seo排名赚app是真的吗
  • 网站建设哪家好知道长春seo网站优化
  • 做系统前怎么保存网站上的收藏黄金网站app视频播放画质选择
  • 做网站开发需要考什么证书百度新闻网
  • asp网站打开很慢的原因江门网站建设模板
  • 朝阳区建设委员会网站长沙大型网站建设公司
  • 网站建设0doit营销软件代理推广
  • 国内建站公司百度快照是什么意思
  • 做网站在自助优化排名工具
  • 论坛网站建设方案北京百度公司地址在哪里
  • 西安做网站的公司哪家好软文营销平台
  • wordpress怎样做单页网站市场调研报告ppt模板
  • 网站开发费用怎么账务处理雅虎搜索引擎入口
  • ps做网站要多大沈阳seo整站优化
  • 文安做网站的怎样创建网页
  • 社区网站模板可以入侵的网站
  • 卡一卡二卡四老狼关闭站长工具seo综合查询
  • asp做网站好不好如何制作自己的网站教程