標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
POSIX.4a |
両方 | POSIX(ON) |
#define _OPEN_THREADS
#include <pthread.h>
int pthread_attr_getdetachstate(pthread_attr_t *attr);
#define _UNIX03_THREADS
#include <pthread.h>
int pthread_attr_getdetachstate(const pthread_attr_t *attr,
int *detachstate);
スレッド属性オブジェクトを使用して、アプリケーションのスレッドの特性を 管理できます。これは、生成時にスレッドに使用される値の集合を定義します。スレッド属性オブジェクトを確立すると、各スレッドごとに特性を定義しないで、同じ一連の特性をもつ多数のスレッドを作成できます。複数のスレッド属性オブジェクトを定義できます。
正常に実行された場合、pthread_attr_getdetachstate() は、detachstate (0 または 1) を戻します。
正常に実行されなかった場合、pthread_attr_getdetachstate() は、-1 を戻します。
設定される errno 値はありません。 perror() または strerror() を使用して、エラーの原因を判別してください。
Single UNIX Specification、バージョン 3 の特殊な動作: 正常に実行されなかった場合、pthread_attr_getdetachstate() はエラーを示すエラー番号を戻します。
CELEBP07
⁄* CELEBP07 *⁄
#define _OPEN_THREADS
#include <stdio.h>
#include <pthread.h>
int main()
{
pthread_attr_t attr;
char typ[12];
if (pthread_attr_init(&attr) == -1) {
perror("error in pthread_attr_init");
exit(1);
}
switch(pthread_attr_getdetachstate(&attr)) {
default:
perror("error in pthread_attr_getdetachstate()");
exit(2);
case 0:
strcpy(typ, "undetached");
break;
case 1:
strcpy(typ, "detached");
}
printf("The detach state is %s.¥n", typ);
if (pthread_attr_destroy(&attr) == -1) {
perror("error in pthread_attr_destroy");
exit(2);
}
exit(0);
}
CELEBP61
⁄* CELEBP61 *⁄
⁄* Example using SUSv3 pthread_attr_getdetachstate() interface *⁄
#define _UNIX03_THREADS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <errno.h>
int main(void)
{
pthread_attr_t attr;
int rc, newstate, foundstate;
char state[12];
if (pthread_attr_init(&attr) == -1) {
perror("error in pthread_attr_init");
exit(1);
}
newstate = PTHREAD_CREATE_DETACHED;
pthread_attr_setdetachstate(&attr, newstate);
rc = pthread_attr_getdetachstate(&attr,&foundstate);
switch(foundstate) {
case PTHREAD_CREATE_JOINABLE:
strcpy(state,"joinable");
break;
case PTHREAD_CREATE_DETACHED:
strcpy(state,"detached");
break;
default:
printf("pthread_attr_getdetachstate returned: %d¥n", rc);
printf("Error: %d, Errno_Jr: %08x¥n", errno, __errno2());
exit(2);
}
printf("Threads created with this attribute object are %s.¥n",state);
if (pthread_attr_destroy(&attr) == -1) {
perror("error in pthread_attr_destroy");
exit(3);
}
exit(0);
}