为什么win10不支持php pthreads pool类和worker对象?

为什么win10不支持php pthreads pool类和worker对象?,第1张

Windows 10 在Win8.1的基础上延续对 Miracast 的支持。即您可以无线传输音频和视频、无线镜像显示到大屏幕上。但是并不是所有安装windows 10 系统的笔记本或平板都支持Miracast功能。同样可以通过运行Dxdiag.exe 命令的方法来测试、验证是否支持?

Windows 10 Miracast 理论原则上支持。然而,驱动程序的作用也必须发挥。图形驱动程序必须支持英特尔 Miracast 工程驱动程序版本 10.18 WDDM 1.3。即Graphic Driver(显卡驱动版本)

支持 WDDM 1.3。另外,Wireless LAN Driver (无线网卡驱动版本)版本至少要求 Ndis 6.30版本。

检验搭载Windows 10 系统的电脑是否支持Miracast最好的办法就是将系统做个快速测试:

1、WIN + R 组合键开始“运行”程序;

2、在“运行”程序的输入框中输入“dxdiag.exe”,确定;

3、d出DrectX诊断工具,选择“是”开始检测;

4、当检测进度条消失,表示检测完毕,“保存所有信息”到桌面;

5、打开保存的TXT文档,编辑—查找“Miracast”,若搜索到如下字眼表示不支持Miracast功能;

PS:Not Available表示不支持,Available, with HDCP表示支持

配置读写锁的属性之后,即可初始化读写锁。以下函数用于初始化或销毁读写锁、锁定或解除锁定读写锁或尝试锁定读写锁。下表列出了本节中讨论的用来处理读写锁的函数。

表 4–9 处理读写锁的例程

初始化读写锁

pthread_rwlock_init 语法

读取读写锁中的锁

pthread_rwlock_rdlock 语法

读取非阻塞读写锁中的锁

pthread_rwlock_tryrdlock 语法

写入读写锁中的锁

pthread_rwlock_wrlock 语法

写入非阻塞读写锁中的锁

pthread_rwlock_trywrlock语法

解除锁定读写锁

pthread_rwlock_unlock 语法

销毁读写锁

pthread_rwlock_destroy语法

使用 pthread_rwlock_init(3C) 可以通过 attr 所引用的属性初始化 rwlock 所引用的读写锁。

pthread_rwlock_init 语法

int pthread_rwlock_init(pthread_rwlock_t *rwlock,

pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER

如果 attr 为 NULL,则使用缺省的读写锁属性,其作用与传递缺省读写锁属性对象的地址相同。初始化读写锁之后,该锁可以使用任意次数,而无需重新初始化。成功初始化之后,读写锁的状态会变为已初始化和未锁定。如果调用 pthread_rwlock_init() 来指定已初始化的读写锁,则结果是不确定的。如果读写锁在使用之前未初始化,则结果是不确定的。对于 Solaris 线程,请参见 rwlock_init 语法 。

如果缺省的读写锁属性适用,则 PTHREAD_RWLOCK_INITIALIZER 宏可初始化以静态方式分配的读写锁,其作用与通过调用 <pthread_rwlock_init() 并将参数 attr 指定为NULL 进行动态初始化等效,区别在于不会执行错误检查。

pthread_rwlock_init 返回值

如果成功,pthread_rwlock_init() 会返回零。否则,将返回用于指明错误的错误号。

如果pthread_rwlock_init()失败,将不会初始化 rwlock ,并且 rwlock 的内容是不确定的。

描述:

attr rwlock 指定的值无效。

pthread_rwlock_rdlock(3C) 可用来向 rwlock 所引用的读写锁应用读锁。

pthread_rwlock_rdlock 语法

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock )

如果写入器未持有读锁,并且没有任何写入器基于该锁阻塞,则调用线程会获取读锁。如果写入器未持有读锁,但有多个写入器正在等待该锁时,调用线程是否能获取该锁是不确定的。如果某个写入器持有读锁,则调用线程无法获取该锁。如果调用线程未获取读锁,则它将阻塞。调用线程必须获取该锁之后,才能从 pthread_rwlock_rdlock()返回。如果在进行调用时,调用线程持有 rwlock 中的写锁,则结果是不确定的。

为避免写入器资源匮乏,允许在多个实现中使写入器的优先级高于读取器。例如,Solaris 线程实现中写入器的优先级高于读取器。 请参见 rw_rdlock 语法 。

一个线程可以在 rwlock 中持有多个并发的读锁,该线程可以成功调用 pthread_rwlock_rdlock() n 次。该线程必须调用 pthread_rwlock_unlock() n 次才能执行匹配的解除锁定 *** 作。

如果针对未初始化的读写锁调用 pthread_rwlock_rdlock(),则结果是不确定的。

线程信号处理程序可以处理传送给等待读写锁的线程的信号。从信号处理程序返回后,线程将继续等待读写锁以执行读取,就好像线程未中断一样。

pthread_rwlock_rdlock 返回值

如果成功,pthread_rwlock_rdlock()会返回零。否则,将返回用于指明错误的错误号。

描述:

attr rwlock 指定的值无效。

pthread_rwlock_tryrdlock(3C) 应用读锁的方式与 pthread_rwlock_rdlock() 类似,区别在于如果任何线程持有 rwlock 中的写锁或者写入器基于 rwlock 阻塞,则 pthread_rwlock_tryrdlock() 函数会失败。对于 Solaris 线程,请参见 语法 。

pthread_rwlock_tryrdlock 语法

int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock)

pthread_rwlock_tryrdlock 返回值

如果获取了用于在 rwlock 所引用的读写锁对象中执行读取的锁,则 pthread_rwlock_tryrdlock() 将返回零。如果没有获取该锁,则返回用于指明错误的错误号。

描述:

无法获取读写锁以执行读取,因为写入器持有该锁或者基于该锁已阻塞。

pthread_rwlock_wrlock(3C) 可用来向 rwlock 所引用的读写锁应用写锁。

pthread_rwlock_wrlock 语法

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock )

如果没有其他读取器线程或写入器线程持有读写锁 rwlock ,则调用线程将获取写锁。否则,调用线程将阻塞。调用线程必须获取该锁之后,才能从pthread_rwlock_wrlock() 调用返回。如果在进行调用时,调用线程持有读写锁(读锁或写锁),则结果是不确定的。

为避免写入器资源匮乏,允许在多个实现中使写入器的优先级高于读取器。(例如,Solaris 线程实现允许写入器的优先级高于读取器。请参见 语法 。)

如果针对未初始化的读写锁调用pthread_rwlock_wrlock(),则结果是不确定的。

线程信号处理程序可以处理传送给等待读写锁以执行写入的线程的信号。从信号处理程序返回后,线程将继续等待读写锁以执行写入,就好像线程未中断一样。

pthread_rwlock_wrlock 返回值

如果获取了用于在 rwlock 所引用的读写锁对象中执行写入的锁,则pthread_rwlock_rwlock() 将返回零。如果没有获取该锁,则返回用于指明错误的错误号。

pthread_rwlock_trywrlock(3C) 应用写锁的方式与 pthread_rwlock_wrlock() 类似,区别在于如果任何线程当前持有用于读取和写入的 rwlock ,则pthread_rwlock_trywrlock()函数会失败。对于 Solaris 线程,请参见 语法 。

pthread_rwlock_trywrlock语法

int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock)

如果针对未初始化的读写锁调用pthread_rwlock_trywrlock(),则结果是不确定的。

线程信号处理程序可以处理传送给等待读写锁以执行写入的线程的信号。从信号处理程序返回后,线程将继续等待读写锁以执行写入,就好像线程未中断一样。

pthread_rwlock_trywrlock 返回值

如果获取了用于在 rwlock 引用的读写锁对象中执行写入的锁,则pthread_rwlock_trywrlock() 将返回零。否则,将返回用于指明错误的错误号。

描述:

无法为写入获取读写锁,因为已为读取或写入锁定该读写锁。

pthread_rwlock_unlock(3C) 可用来释放在 rwlock 引用的读写锁对象中持有的锁。

pthread_rwlock_unlock 语法

int pthread_rwlock_unlock (pthread_rwlock_t *rwlock)

如果调用线程未持有读写锁 rwlock ,则结果是不确定的。对于 Solaris 线程,请参见 语法 。

如果通过调用 pthread_rwlock_unlock() 来释放读写锁对象中的读锁,并且其他读锁当前由该锁对象持有,则该对象会保持读取锁定状态。如果pthread_rwlock_unlock()释放了调用线程在该读写锁对象中的最后一个读锁,则调用线程不再是该对象的属主。如果 pthread_rwlock_unlock() 释放了该读写锁对象的最后一个读锁,则该读写锁对象将处于无属主、解除锁定状态。

如果通过调用 pthread_rwlock_unlock() 释放了该读写锁对象的最后一个写锁,则该读写锁对象将处于无属主、解除锁定状态。

如果 pthread_rwlock_unlock() 解除锁定该读写锁对象,并且多个线程正在等待获取该对象以执行写入,则通过调度策略可确定获取该对象以执行写入的线程。如果多个线程正在等待获取读写锁对象以执行读取,则通过调度策略可确定等待线程获取该对象以执行写入的顺序。如果多个线程基于 rwlock 中的读锁和写锁阻塞,则无法确定读取器和写入器谁先获得该锁。

如果针对未初始化的读写锁调用pthread_rwlock_unlock(),则结果是不确定的。

pthread_rwlock_unlock 返回值

如果成功,pthread_rwlock_unlock() 会返回零。否则,将返回用于指明错误的错误号。

pthread_rwlock_destroy(3C) 可用来销毁 rwlock 引用的读写锁对象并释放该锁使用的任何资源。

pthread_rwlock_destroy 语法

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock)

pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER

在再次调用 pthread_rwlock_init()重新初始化该锁之前,使用该锁所产生的影响是不确定的。实现可能会导致 pthread_rwlock_destroy()将 rwlock 所引用的对象设置为无效值。如果在任意线程持有 rwlock 时调用pthread_rwlock_destroy(),则结果是不确定的。尝试销毁未初始化的读写锁会产生不确定的行为。已销毁的读写锁对象可以使用 pthread_rwlock_init() 来重新初始化。销毁读写锁对象之后,如果以其他方式引用该对象,则结果是不确定的。对于 Solaris 线程,请参见 语法 。

pthread_rwlock_destroy 返回值

如果成功,pthread_rwlock_destroy() 会返回零。否则,将返回用于指明错误的错误号。

描述:

attr rwlock 指定的值无效。

转自:

https://www.cnblogs.com/x_wukong/p/5671537.html

pthreads-win32是windows下的pthread库,它默认采用的是动态链接库的链接方式,因此在使用该库的程序都需要带上一个动态库pthreadVC2.dll,感觉挺不方便的,下面介绍如何静态链接pthreads-win32:

首先要编译静态库: 从ftp //sources redhat com/pub/pthreads-win32/下载最新的库安装包,笔者下载的是pthreads-w32-2-8-0-release.exe,自解压到一个目录,用vc7打开pthreads.2目录下的pthread.dsw,会提示工程版本转换,选择全是,然后打开该工程的属性页,在“常规”选项页的配置类型选择“静态库(.lib)”,在“c/c++”选项页的预处理器定义删除_USRDLL和PTW32_BUILD,添加PTW32_STATIC_LIB,确定保存即可。当然,你需要根据你的需要选择运行时库的类型。最后重新生成pthread便可生成我们需要的pthread.lib。

下面讲述如何使用前面生成的静态库:新建一个控制台工程,将pthread.lib拷贝到工程目录,在预处理器定义中添加PTW32_STATIC_LIB,附加包含目录添加pthreads-win32代码所在目录,笔者是E:/pthreads/pthreads.2,附加依赖项添加Ws2_32.lib和pthread.lib即可,简单使用代码如下:

#include <iostream>

#include "pthread.h"

void * Function_t(void * Param)

{

std::cout <<"我是线程!" <<std::endl

pthread_t myid = pthread_self()

printf( "线程ID = %d", myid )

return NULL

}

int main()

{

#ifdef PTW32_STATIC_LIB

pthread_win32_process_attach_np()

#endif

pthread_t pid

pthread_attr_t attr

pthread_attr_init(&attr)

pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS)

pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)

pthread_create(&pid, &attr, Function_t, NULL)

std::cout <<"========================================" <<std::endl

getchar()

pthread_attr_destroy(&attr)

#ifdef PTW32_STATIC_LIB

pthread_win32_process_detach_np()

#endif

return 1

}

其中

#ifdef PTW32_STATIC_LIB

pthread_win32_process_attach_np()

#endif

#ifdef PTW32_STATIC_LIB

pthread_win32_process_detach_np()

#endif

对于静态链接方式非常重要,如果没有这段代码,线程将创建失败。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6706921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存