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

建立网站原理wordpress模板没反应

建立网站原理,wordpress模板没反应,网站做一下301跳转,企业网站的制作在Windows平台下创建多线程有两种方式#xff0c;读者可以使用CreateThread函数#xff0c;或者使用beginthreadex函数均可#xff0c;两者虽然都可以用于创建多线程环境#xff0c;但还是存在一些差异的#xff0c;首先CreateThread函数它是Win32 API的一部分#xff0c…在Windows平台下创建多线程有两种方式读者可以使用CreateThread函数或者使用beginthreadex函数均可两者虽然都可以用于创建多线程环境但还是存在一些差异的首先CreateThread函数它是Win32 API的一部分而_beginthreadex是C/C运行库的一部分在参数返回值类型方面CreateThread返回线程句柄而_beginthreadex返回线程ID当然这两者在使用上并没有太大的差异但为了代码更加通用笔者推荐使用后者因为后者与平台无关性更容易实现跨平台需求。 CreateThread CreateThread 函数是Windows API提供的用于创建线程的函数。它接受一些参数如线程的入口函数、线程的堆栈大小等可以创建一个新的线程并返回线程句柄。开发者可以使用该句柄控制该线程的运行状态。需要注意在使用CreateThread创建线程时线程入口函数的返回值是线程的退出码而不是线程执行的结果值。 CreateThread 函数原型如下 HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId );参数说明 lpThreadAttributes指向SECURITY_ATTRIBUTES结构体的指针指定线程安全描述符和访问权限。通常设为NULL表示使用默认值。dwStackSize指定线程堆栈的大小以字节为单位。如果dwStackSize为0则使用默认的堆栈大小。(注在32位程序下该值的默认大小为1MB在64位程序下该值的默认大小为4MB)lpStartAddress指向线程函数的指针这个函数就是线程执行的入口点。当线程启动时系统就会调用这个函数。lpParameter指定传递给线程函数的参数可以为NULL。dwCreationFlags指定线程的创建标志。通常设为0表示使用默认值。lpThreadId指向一个DWORD变量的指针表示返回的线程ID号。可以为NULL。 CreateThread 函数将创建一个新的线程并返回线程句柄。开发者可以使用该句柄控制该线程的运行状态如挂起、恢复、终止等。线程创建成功后执行线程函数进行相应的业务处理。需要注意的是在使用CreateThread创建线程时线程入口函数的返回值是线程的退出码而不是线程执行的结果值。 #include windows.h #include iostreamusing namespace std;DWORD WINAPI Func(LPVOID lpParamter) {for (int x 0; x 10; x){cout thread function endl;Sleep(200);}return 0; }int main(int argc,char * argv[]) {HANDLE hThread CreateThread(NULL, 0, Func, NULL, 0, NULL);CloseHandle(hThread);for (int x 0; x 10; x){cout main thread endl;Sleep(400);}system(pause);return 0; }如上所示代码中我们在线程函数Func()内没有进行任何的加锁操作那么也就会出现资源的争夺现象这些会被抢夺的资源就被称为是临界资源我们可以通过设置临界锁来实现同一时刻内保持一个线程操作资源。 EnterCriticalSection 是Windows API提供的线程同步函数之一用于进入一个临界区并且锁定该区域以确保同一时间只有一个线程访问临界区代码。 EnterCriticalSection函数的函数原型如下 void EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection );参数说明 lpCriticalSection指向CRITICAL_SECTION结构体的指针表示要进入的临界区。 EnterCriticalSection 函数将等待直到指定的临界区对象可用并且已经锁定然后当前线程将进入临界区。临界区中的代码将在当前线程完成之前不允许被任何其他线程执行。当线程完成临界区的工作时应该调用LeaveCriticalSection函数释放临界区。否则其他线程将无法进入临界区导致死锁。 EnterCriticalSection 函数是比较底层的线程同步函数需要开发者自行创建临界区维护临界区的状态并进行加锁解锁的操作使用时需要注意对临界区中的操作进行适当的封装和处理。同时EnterCriticalSection函数也是比较高效的线程同步方式对于需要频繁访问临界资源的场景可以通过使用临界区来提高程序的性能。 #include Windows.h #include iostreamint Global_One 0;// 全局定义临界区对象 CRITICAL_SECTION g_cs;// 定义一个线程函数 DWORD WINAPI ThreadProc(LPVOID lpParam) {// 加锁防止线程数据冲突EnterCriticalSection(g_cs);for (int x 0; x 10; x){Global_One;Sleep(1);}// 执行完修改以后,需要释放锁LeaveCriticalSection(g_cs);return 0; }int main(int argc, char * argv[]) {// 初始化临界区InitializeCriticalSection(g_cs);HANDLE hThread[10] { 0 };for (int x 0; x 10; x){// 循环创建线程hThread[x] CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);}// 等待多个线程执行结束WaitForMultipleObjects(10, hThread, TRUE, INFINITE);// 最后循环释放资源for (int x 0; x 10; x){CloseHandle(hThread[x]);}printf(全局变量值: %d \n, Global_One);// 释放锁DeleteCriticalSection(g_cs);system(pause);return 0; }回到顶部 9.1.2 BeginThreadex BeginThreadex 是C/C运行库提供的用于创建线程的函数。它也接受一些参数如线程的入口函数、线程的堆栈大小等与CreateThread不同的是_beginthreadex函数返回的是线程的ID而不是线程句柄。开发者可以使用该ID在运行时控制该线程的运行状态。此外_beginthreadex函数通常与_endthreadex配对使用供线程退出时使用。 beginthreadex 函数的函数原型如下 uintptr_t _beginthreadex(void* security,unsigned stack_size,unsigned(__stdcall* start_address)(void*),void* arglist,unsigned initflag,unsigned* thrdaddr );参数说明 security与Windows安全机制相关用于指定线程的安全属性一般填NULL即可。stack_size指定线程的堆栈大小以字节为单位。如果stack_size为0则使用默认的堆栈大小。start_address线程函数的入口点。arglist传递给线程函数的参数。initflag线程标志0表示启动线程后立即运行CREATE_SUSPENDED表示启动线程后暂停运行。thrdaddr指向unsigned变量的指针表示返回的线程ID号。可以为NULL。 与CreateThread相比_beginthreadex函数返回线程ID而非线程句柄使用时需要注意区分。与CreateThread不同的是_beginthreadex函数接受传递给线程函数的参数放在arglist中方便传递多个参数。线程使用完需要调用_endthreadex函数来关闭线程。当使用了_beginthreadex创建的线程退出时会调用_endthreadex来结束线程这里的返回值会被当做线程的退出码。 #include windows.h #include iostream #include process.husing namespace std;unsigned WINAPI Func(void *arg) {for (int x 0; x 10; x){cout thread function endl;Sleep(200);}return 0; }int main(int argc, char * argv[]) {HANDLE hThread (HANDLE)_beginthreadex(NULL, 0, Func, NULL, 0, NULL);CloseHandle(hThread);for (int x 0; x 10; x){cout main thread endl;Sleep(400);}system(pause);return 0; }由于CreateThread()函数是Windows提供的API接口,在C/C语言另有一个创建线程的函数_beginthreadex()该函数在创建新线程时会分配并初始化一个_tiddata块,这个块用来存放一些需要线程独享的数据,从而保证了线程资源不会发生冲突的情况,代码只需要稍微在上面基础上改进即可。 当然该函数同样需要设置线程临界区而设置方式与CreateThread中所展示的完全一致。 #include stdio.h #include process.h #include windows.h// 全局资源 long g_nNum 0;// 子线程个数 const int THREAD_NUM 10;CRITICAL_SECTION g_csThreadCode;unsigned int __stdcall ThreadFunction(void *ptr) {int nThreadNum *(int *)ptr;// 进入线程锁EnterCriticalSection(g_csThreadCode);g_nNum;printf(线程编号: %d -- 全局资源值: %d -- 子线程ID: %d \n, nThreadNum, g_nNum, GetCurrentThreadId());// 离开线程锁LeaveCriticalSection(g_csThreadCode);return 0; }int main(int argc,char * argv[]) {unsigned int ThreadCount 0;HANDLE handle[THREAD_NUM];InitializeCriticalSection(g_csThreadCode);for (int each 0; each THREAD_NUM; each){handle[each] (HANDLE)_beginthreadex(NULL, 0, ThreadFunction, each, 0, ThreadCount);printf(线程ID: %d \n, ThreadCount);}WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);DeleteCriticalSection(g_csThreadCode);system(pause);return 0; }总的来说_beginthreadex比CreateThread更加高级封装了许多细节使用起来更方便特别是对于传递多个参数的情况下可以更简单地传参。
http://www.w-s-a.com/news/121797/

相关文章:

  • 婚庆公司网站模板wordpress用什么框架
  • 高校网站建设的时效性长沙市网站建设
  • 合肥网站建设市场四川建设网官网住房和城乡厅官网官方
  • 天行健君子以自强不息网站建设江西网站做的好的企业文化
  • 建网站内容谷歌搜索引擎优化
  • 网站建设与管理案例教程第三版答案网站建设策划书范文六篇精选
  • 建设工程项目在哪个网站查询实时网站推广的最终目的是
  • 个人网站可以做淘客网站设置的参数
  • 自适应网站制作公司做室内设计通常上的网站
  • 网站建设项目采购公告建设网站公司建网页
  • 自己做网站怎么推广网站建设应该考虑哪些方面
  • 我做的网站手机上不了wordpress插件整站搬家
  • 河南省和建设厅网站首页西安找建网站公司
  • 网页设计基础代码网站进出成都最新通知
  • 如何创建网站乐清网络科技有限公司
  • 沈阳市网站制作艺术字体logo设计生成器
  • 网站设计常用软件都有哪些中国建设银行官方招聘网站
  • 证券投资网站建设视频直播怎么赚钱的
  • 建设酒店网站ppt模板下载郑州小程序设计外包
  • 网站建设自我总结google推广公司
  • 安全网站建设情况wordpress 评论表单
  • 网站建设发言材料个人网站推广软件
  • php建站软件哪个好南京哪家做网站好
  • 排名好的手机网站建设番禺网站建设专家
  • 番禺怎么读百度有专做优化的没
  • 网站开发中应注意哪些问题网络营销的主要特点
  • 网站定制案例北京网站制作招聘网
  • 网站建设与推广实训小结网站建设专业英文
  • 郑州网站建设动态凡科网站建设是免费的吗
  • 湖北手机网站建设wordpress转emlog博客