线程中常用函数及参数

1._beginthread()

假如成功,函数将会返回一个新线程的句柄(HANDLE是void *类型)

HANDLE hd =_beginthread(CheckKey, 0, NULL)

  • 新线程的起始地址 ,指向新线程调用的函数的起始地址
  • 新线程的栈大小,可以为0
  • 传递给线程的参数列表,无参数时为NULL

2.CreateThread()

函数返回值:

成功返回新线程的句柄,失败返回NULL。

HANDLE thread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);

CloseHandle(thread);  //关闭线程

  • 第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置
  • 第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)
  • 第三个参数传递了一个函数的地址,也是我们要制定的新线程。
  • 第四个参数是传给新线程的参数指针。
  • 第五个参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。
  • 第六个参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。

3.WaitForSingleObject()

函数功能:WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到 WaitForSingleObject有返回值才执行后面的代码。此外,当dwMilliseconds设置为特殊值0时,测试hHandle核心对象是否被激发,函数立即返回。

函数原形:

DWORD WINAPI WaitForSingleObject(

  HANDLE hHandle,

  DWORD dwMilliseconds

);

第一个参数为要等待的内核对象。

第二个参数为最长等待的时间,以毫秒为单位,如传入5000就表示5秒,传入0就立即返回,传入INFINITE表示无限等待。

因为线程的句柄在线程运行时是未触发的,线程结束运行,句柄处于触发状态。所以可以用WaitForSingleObject()来等待一个线程结束运行。

函数返回值:在指定的时间内对象被触发,函数返回WAIT_OBJECT_0。超过最长等待时间对象仍未被触发返回WAIT_TIMEOUT。传入参数有错误将返回WAIT_FAILED

 

 4.WaitForMultipleObjects()

函数原形:

DWORD WaitForMultipleObjects(  

  DWORD nCount,             

  CONST HANDLE *lpHandles,  

  BOOL fWaitAll,         

  DWORD dwMilliseconds    

);   

  • nCount 句柄的数量 最大值为MAXIMUM_WAIT_OBJECTS(64)  
  • HANDLE 句柄数组的指针。  
  • HANDLE 类型可以为(Event,Mutex,Process,Thread,Semaphore )数组  
  • BOOL fWaitAll 等待的类型,如果为TRUE 则等待所有信号量有效在往下执行,FALSE 当有其中一个信号量有效时就向下执行  (表示如果为true,则表示所有的IpHandles都必须激发,此函数才得以返回,否则,此函数将在任何一个IpHandle激发时就返回。)
  • DWORD dwMilliseconds 第四个参数表示超时也返回,可为0,立即返回,INFINITE表示无穷等待,如果没有信号量就会在这死等。 

 5.CreateEvent()

HANDLE CreateEvent(
LPSECURITY_ATTRIBUTESlpEventAttributes,// 安全属性,一般为NULL
BOOLbManualReset,// 复位方式,创建的Event是自动复位还是人工复位.如果true,人工复位
BOOLbInitialState,// 初始状态,指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
LPCTSTRlpName // 事件对象的名称。在OpenEvent函数中可能使用。
);
 
6.SetEvent/ResetEvent
函数原型:
BOOL SetEvent(HANDLE hEvent);
BOOL ResetEvent(HANDLE hEvent);
 
SetEvent,ResetEvent,CreatEvent三者之间的关系:

CreatEvent():创建一个事件对象

SetEvent():把指定事件对象的状态设置为发信号状态(激发事件)

ResetEvent():把指定事件对象的状态设置为不发信号状态

转载于:https://www.cnblogs.com/sjxbg/p/5786731.html

C语言线程相关的常用函数包括: 1. pthread_create ```c int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); ``` 该函数用于创建一个新的线程参数说明如下: - thread:指向线程标识符的指针,创建成功后会将线程的标识符返回给调用者。 - attr:指定线程的属性,通常使用默认属性即可,传入NULL。 - start_routine:指向线程函数的指针,线程创建后会从该函数开始执行。 - arg:传递给线程函数参数。 2. pthread_join ```c int pthread_join(pthread_t thread, void **retval); ``` 该函数用于等待一个线程结束,参数说明如下: - thread:等待的线程标识符。 - retval:指向线程返回值存储位置的指针,可以为NULL,表示不关心线程返回值。 3. pthread_detach ```c int pthread_detach(pthread_t thread); ``` 该函数用于将线程设置为分离状态,使得线程结束时能够自动释放资源,参数说明如下: - thread:需要分离的线程标识符。 4. pthread_exit ```c void pthread_exit(void *retval); ``` 该函数用于线程退出,参数说明如下: - retval:线程的返回值。 5. pthread_cancel ```c int pthread_cancel(pthread_t thread); ``` 该函数用于取消一个线程参数说明如下: - thread:需要取消的线程标识符。 6. pthread_mutex_init ```c int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); ``` 该函数用于初始化一个互斥锁,参数说明如下: - mutex:指向互斥锁的指针。 - attr:指定互斥锁的属性,通常使用默认属性即可,传入NULL。 7. pthread_mutex_destroy ```c int pthread_mutex_destroy(pthread_mutex_t *mutex); ``` 该函数用于销毁一个互斥锁,参数说明如下: - mutex:指向互斥锁的指针。 8. pthread_mutex_lock ```c int pthread_mutex_lock(pthread_mutex_t *mutex); ``` 该函数用于加锁一个互斥锁,参数说明如下: - mutex:指向互斥锁的指针。 9. pthread_mutex_unlock ```c int pthread_mutex_unlock(pthread_mutex_t *mutex); ``` 该函数用于解锁一个互斥锁,参数说明如下: - mutex:指向互斥锁的指针。 10. pthread_cond_init ```c int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); ``` 该函数用于初始化一个条件变量,参数说明如下: - cond:指向条件变量的指针。 - attr:指定条件变量的属性,通常使用默认属性即可,传入NULL。 11. pthread_cond_destroy ```c int pthread_cond_destroy(pthread_cond_t *cond); ``` 该函数用于销毁一个条件变量,参数说明如下: - cond:指向条件变量的指针。 12. pthread_cond_wait ```c int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); ``` 该函数用于等待一个条件变量,参数说明如下: - cond:指向条件变量的指针。 - mutex:指向互斥锁的指针。 13. pthread_cond_signal ```c int pthread_cond_signal(pthread_cond_t *cond); ``` 该函数用于唤醒一个等待条件变量的线程参数说明如下: - cond:指向条件变量的指针。 14. pthread_cond_broadcast ```c int pthread_cond_broadcast(pthread_cond_t *cond); ``` 该函数用于广播一个条件变量,唤醒所有等待条件变量的线程参数说明如下: - cond:指向条件变量的指针。 这些函数在不同的操作系统和编译器可能有所不同,需要根据具体的使用情况来选择和调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值