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

句容网站建设制作/太原网站制作优化seo公司

句容网站建设制作,太原网站制作优化seo公司,动漫wordpress主题,上海优化网站 优帮云事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”,否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠…

事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”,否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。

产生事件对象的函数如下:

(1)CreateEvent
函数原型:

HANDLE CreateEvent(   
    LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性   
    BOOL bManualReset, // 复位方式   
    BOOL bInitialState, // 初始状态   
    LPCTSTR lpName // 对象名称   
); 

      该函数创建一个Event同步对象,如果CreateEvent调用成功的话,会返回新生成的对象的句柄,否则返回NULL。
      lpEventAttributes:一般为NULL  
      bManualReset:指定将事件对象创建成手动复原还是自动复原。如果是TRUE(手动),那么就算等待线程处理了,必须用ResetEvent函数来手工才能将事件的状态复原到无信号状态。如果设置为FALSE(自动),当事件被一个等待线程处理并释放以后,系统会自动将事件状态复原为无信号状态。所以两者可用于不同的场合,自动复位的需要每次的事件信号才会执行,而手动复位的则可以一直运行。
      bInitialState:指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
      lpName:指定事件的对象的名称,在OpenEvent函数中可能使用。
      

       示例代码:// 创建一个有名的,不能被继承的,手动复原,初始状态是无信号状态的事件对象:
       Handle h = CreateEvent(NULL,TRUE,FALSE,“MyEvent”);

         一个Event被创建以后,可以用OpenEvent()API来获得它的Handle,用CloseHandle()来关闭它,用SetEvent()或PulseEvent()来设置它使其有信号,用ResetEvent()来使其无信号,用WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号.。  

(2)SetEvent

函数原型:
BOOL WINAPI SetEvent(
      __in  HANDLE hEvent
);
设置事件的状态为有标记。如果事件创建时是手工的,此事件将保持有标记直到调用ResetEvent。如果事件是自动的,此事件将保持有标记,直到一个线程被释放,系统将设置事件的状态为无标记。

(3)ResetEvent

函数原型:
BOOL ResetEvent(   
     HANDLE hEvent   
); 
hEvent 指向事件对象的句柄,由 CreateEvent or OpenEvent 函数返回。这个句柄需要拥有EVENT_MODIFY_STATE 访问权限。函数成功,返回非0值,否则返回0值,可以调用GetLastError得到错误的详细信息。 
      这个函数用于手动重置事件对象。手动重置的对象在线程释放后必须手动置为无信号状态。自动重置的事件对象在一个等待它成功的线程释放后会自动变为无信号状态。 重置一个无信号的事件对象没有任何效果。

(4)WaitForSingleObject

函数原型:
DWORD WaitForSingleObject( 

      HANDLE hHandle, 

      DWORD dwMilliseconds

);
参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果事件是有信号状态返回WAIT_OBJECT_0,如果事件超过dwMilliseconds值但事件还是无信号状态,则返回WAIT_TIMEOUT。之前线程会一直阻塞程序在该语句处。


上述文字转载自:https://blog.csdn.net/gateway6143/article/details/35215595


eg:

#include <stdio.h>

#include <windows.h>
#include <process.h>

void Log(char* pszData)
{
DWORD dwProcessId = GetCurrentProcessId();
DWORD dwThreadId = GetCurrentThreadId();
printf("pid=0x%08X,tid=0x%08X, %s\r\n", dwProcessId, dwThreadId, pszData);
}


HANDLE g_Event = NULL;
unsigned int __stdcall ThreadFunc(void* pParam)
{
Log("ThreadFunc begin");
Log("ThreadFunc WaitForSingleObject...");


WaitForSingleObject(g_Event, INFINITE);


Log("wait 10s...");


Sleep(10000);


return 0;
}


int main(int argc, char* argv[])
{
Log("main begin");
Log("create event");
// 创建一个手动复原,无信号,无名称的事件
g_Event = CreateEvent(NULL, TRUE, FALSE, NULL);
HANDLE hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, NULL);


Log("wait 10s...");
Sleep(10000);


Log("set event");
SetEvent(g_Event);


DWORD dwExitCode = 0;
GetExitCodeThread(hThread1, &dwExitCode);
if (STILL_ACTIVE == dwExitCode)
{
Log("WaitForSingleObject enter");
WaitForSingleObject(hThread1, INFINITE);
Log("WaitForSingleObject leave");


// 手动重置的事件在线程释放后需要手动置为无信号状态
ResetEvent(g_Event);
}
Log("main end");
getchar();
return 0;
}
http://www.jmfq.cn/news/5131297.html

相关文章:

  • 网站怎么做响应/谷歌浏览器下载手机版
  • 做亚马逊网站一般发什么快递公司/软件制作
  • 成都优化网站关键词/做seo推广一年大概的费用
  • 游戏网站开发公司/电子邮件营销
  • 创意字体设计网站/优化网站链接的方法
  • 什么网站是做汽车装饰配件的/seo页面代码优化
  • 查国外企业用什么软件/域名查询seo
  • wordpress隐藏后台登录/百度关键词优化的意思
  • 昆明做网站建设公司/创意设计
  • 网站banner特效/微信营销软件免费版
  • 东兴移动网站建设/ue5培训机构哪家强
  • 手机网站打不开的解决方法/市场营销的对象有哪些
  • 衡阳商城网站制作/提高工作效率的方法不正确的是
  • 舟山做网站的公司/深圳开发公司网站建设
  • 东营招标投标信息网/白云百度seo公司
  • 武汉做网站多少钱/网络营销推广方案策划
  • java php 做网站/企业网络营销系统分析报告
  • 装修设计平台有哪些/seo优化软件
  • 网页视频怎么下载到本地视频手机/云优化
  • 红色餐饮网站源码/bt磁力种子
  • 有哪些制作网站的公司吗/高端定制网站建设
  • 做网站需要的带宽上行还是下行/百度广告联盟网站
  • 网站开发验收报告模板/搜索引擎营销的方法不包括
  • 自己做网站要多久/百度浏览官网
  • 做网站工作室/百度网盘24小时人工电话
  • 银川做淘宝网站的/windows优化大师提供的
  • 免费做deal的网站/东营百度推广公司
  • 三五互联网站管理登录网址/深圳aso优化
  • 帝国cms如何做网站地图/北京seo代理商
  • 做app和做网站相同和区别/广州seo诊断