2016-10-02 2 views
1

я следующий исходный C:Код ошибки 3030 на странице as400/IBM I?

#define _MULTI_THREADED 
#include <pthread.h> 
#include <stdio.h> 

void* threadfunc(void* parm){ 
    printf("Hello thread.\n"); 
    pthread_exit(NULL); 
} 

int main(int argc, char* argv[]){ 
    pthread_t t; 
    int rc; 
    rc = pthread_create(&t, NULL, threadfunc, NULL); 
    printf("Create return code: %i\n", rc); 
    if(!rc){ 
     pthread_join(t, NULL); 
    } 
    return 0; 
} 

Собран с crtbndc pgm(test) srcfile(myfile) srcmbr(test)

При вызове с call test, я получаю выход:

Создать код возврата: 3029

Что означает этот код ошибки?

ответ

3

Согласно IBM я documentation, Pthreads, кажется, не поддерживаются:

создание темы (pthread_create()) не с EBUSY или 3029

Поскольку многие части операционной системы не являются но потокобезопасный, не каждая работа может начинать темы. API pthread_create() с ошибкой вызывает ошибку EBUSY, когда процессу не разрешено создавать потоки. См. Запуск программ с резьбой для получения информации о том, как запустить задание , которые могут создавать потоки.

И это предлагает несколько alternatives.

+0

Я собирался опубликовать свой следующий вопрос, но поскольку я могу отправлять сообщения только каждые 90 минут, я попрошу здесь. Я попробовал одну из альтернатив, которая заключается в том, чтобы запустить задание с помощью команды SBMJOB, но этот способ не печатает вызовы печати задания на моем экране. Как выполнить задание, запущенное с печатью SBMJOB на моем экране, как если бы оно вызывалось напрямую с помощью команды CALL? –

+1

Представленное задание работает в режиме * batch * отдельно от локальной рабочей станции, и в отличие от \ * nix, IBM i, будучи объектно-ориентированным, не рассматривает все как * файл *, который может быть открыт, поэтому терминал не может так легко записывается с другой работы, как это может быть в случае с другой ОС. Вероятно, проще всего попробовать разные предложенные * альтернативы; в частности, используя 'QSH' для запуска' test.pgm' после 'ADDENVVAR QIBM_MULTI_THREADED 'Y'' – CRPence

1

Коды ошибок возврата могут быть легко интерпретированы, просмотрев описание сообщения для соответствующего идентификатора сообщения. Используйте префикс «CPE» с кодом возврата символа «3029». Так что для этого, увидеть эту команду:

DSPMSGD CPE3029 

В этом случае текст первого уровня является «Ресурс занят.» Вероятно, это относится к отображаемому файлу/устройству, которое уже активно используется и назначается основному потоку задания (при условии, что CALL был выполнен в интерактивном задании).

В программе вы можете ознакомиться с темой Checking the Errno Value в руководстве программиста ILE C/C++. Элемент ERRNO в исходном файле H в библиотеке QSYSINC также должен быть пересмотрен.

Кроме того, в Центр знаний находится таблица Errno Values for UNIX-Type Functions.

Смежные вопросы