多线程程序并发

 1.多线程程序并发的执行它自身的各个部分,多线程程序的主要问题是管理线程之间的交互。所有的进程都包含一个
执行线程,称之为主线程。主线程在程序开始时创建,然后主线程创建一个或者多个子线程。c++没有包含任何对多线程应用程序的内建支持,它依赖于操作系统提供的特性。c++允许直接使用操作系统提供的多线程特性。



    2.windows线程函数
    (1)线程的创建和终止
     windows API提供了CreateThread()函数来创建一个线程。函数原型如下:
HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpsa, 
  DWORD cbStack, 
         LPTHREAD_START_ROUTINE lpStartAddr, 
  LPVOID lpvThreadParam, 
  DWORD fdwCreate, 
  LPDWORD lpIDThread
); 
    参数:
lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL,表示使用缺省值。
   dwStackSize,线程堆栈大小,一般=0,在任何情况下,Windows根据需要动态延长堆栈的大小。
   lpStartAddress,指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明:
   DWORD WINAPI ThreadProc (LPVOID lpParam) ,格式不正确将无法调用成功。
   lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
   dwCreationFlags :线程标志,可取值如下
   (1)CREATE_SUSPENDED-----创建一个挂起的线程,
   (2)0---------------------------------表示创建后立即激活。
   lpThreadId:保存新线程的id。
  返回值:
       函数成功,返回线程句柄;函数失败返回false。


    可以调用CloseThread()来显示销毁这个线程,否则在父进程结束时自动销毁。
    还可以使用以下函数:
VOID ExitThread( 
  DWORD dwExitCode
); //用来终止调用了该函数的线程,早功能上等价于允许线程函数正常返回。
    BOOL TerminateThread(
  HANDLE hThread, //要终止的线程句柄
  DWORD dwExitCode
);//立刻终止线程



    3.Visual C++对CreateThread()和ExitThread()的替换。
在visual C++中使用CreateThread()和ExitThread()会泄漏少量内存,因此Visual C++用_beginthreadex()和
_endthreadex()替换,需要头文件<process.h>,下面是函数原型:
uintptr_t _beginthreadex( 
    void *security,
    unsigned stack_size,
    unsigned ( *start_address )( void * ),//回调函数
    void *arglist,//传递给回调函数的参数
    unsigned initflag,
    unsigned *thrdaddr 
);
void _endthreadex( 
    unsigned retval 
);
功能与参数含义大体与CreateThread()和ExitThread()相同。



     4.线程的挂起与恢复
DWORD SuspendThread(
  HANDLE hThread); //挂起


DWORD ResumeThread( 
  HANDLE hThread);//恢复 
        每个执行的线程都有与其相关的挂起计数,如果计数为0则不会挂起,计数为非0值则挂起。发生错误,反悔-1;



     5.改变线程优先级
线程的优先级由进程的优先级以及各个线程的优先级的组合确定。
(1)进程优先级别:
ABOVE_NORMAL_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
IDLE_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS
可以用一下函数获取或者设置进程优先级:
DWORD WINAPI GetPriorityClass(
         HANDLE hProcess);
BOOL WINAPI SetPriorityClass(
           HANDLE hProcess,
             DWORD dwPriorityClass);


(2)线程优先级别
THREAD_PRIORITY_TIME_CRITICAL 
THREAD_PRIORITY_HIGHEST  
THREAD_PRIORITY_ABOVE_NORMAL 
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_LOWEST 
THREAD_PRIORITY_ABOVE_IDLE
THREAD_PRIORITY_IDLE 
可以用一下函数获取或者设置线程优先级:
int GetThreadPriority( 
  HANDLE hThread);
BOOL SetThreadPriority( 
  HANDLE hThread, 
  int nPriority); 

      6.获取当前线程的句柄
HANDLE GetCurrentThread(void);
得到的是一个伪句柄

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值