除了 pthread_attr_t 之外,来自POSIX线程的pthread_create的所有参数都非常简单易懂。什么是 pthread_attr_t , NULL 的初始化时间,方式和时间是什么?
我浏览了Linux man page。我发现的关于 pthread_attr_t 的说明是:
语法:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SET_ALWAYS_FINISH" />
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
<uses-permission android:name="android.permission.BROADCAST_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.sagarmakhija1994.Framework.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="com.sagarmakhija1994.Framework.MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.service.notification.NotificationListenerService" />
<action android:name="android.intent.ACTION_CLOSE_SYSTEM_DIALOGS" />
</intent-filter>
</receiver>
</application>
说明:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void*),void *arg);
哪个不太清楚。我也在互联网上搜索,也没有任何明确的解释。那么,当 pthread_attr_t 不是 NULL 时?
有人可以对此有所了解吗?所有评论和反馈都受到高度赞赏。
答案 0 :(得分:7)
您可以使用它创建一个分离的(不可连接的)线程,或者将线程的堆栈大小设置为非默认值以及其他属性。
请参阅POSIX规范:
pthread_attr_init()
pthread_attr_setdetachstate()
pthread_attr_setguardsize()
pthread_attr_setinheritsched()
pthread_attr_setschedparam()
pthread_attr_setschedpolicy()
pthread_attr_setscope()
pthread_attr_setstack()
pthread_attr_setstacksize()
(每个网址有两个功能 - pthread_attr_destroy()
和&#39; get&#39;类似于&#39;设置&#39;功能。)
大多数情况下,您不需要修改这些内容。将NULL指针传递给pthread_create()
等同于使用一组默认属性 - 这是pthread_attr_init()
为您创建的属性。您可以通过函数更改要在pthread_attr_t
对象中更改的属性,然后将该修改后的对象传递给pthread_create()
。
另一个没有明显理由的事情是来自
pthread_create
pthread_t
数据类型定义的第一个参数。
所有POSIX线程类型都是不透明的 - 这是POSIX委员会经过深思熟虑的设计决策。你不能携带这种类型的东西。这使得实现更容易 - 您只能执行功能允许您执行的操作。最终,它也简化了程序员(用户)的生活;你不会被欺骗使用不会迁移到其他系统的POSIX实现的内部知识。