2016-10-02 43 views
1

私は、次のCソースがあります。as400/IBMのpthreadエラー・コード3029?

crtbndc pgm(test) srcfile(myfile) srcmbr(test)

call testで呼び出されたとき、私は出力を得ることでコンパイル

#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; 
} 

は、リターンコードを作成します:3029

をこのエラーコードは何を意味しますか?

答えて

3

IBM iのdocumentationによると、pthreadsのは、サポートされていないようです:

スレッドの作成を、オペレーティング・システムの多くの部分ではないので(pthread_createのは())3029

EBUSYで失敗しますか、スレッドセーフであり、 すべてのジョブがスレッドを開始できるわけではありません。プロセスがスレッドの作成を許可されていない場合、pthread_create()APIは EBUSYエラーで失敗します。スレッドを作成できるジョブ を開始する方法については、 スレッドプログラムの実行を参照してください。

そして、それはいくつかを示しますalternatives

+0

私は次の質問を投稿しようとしていましたが、90分ごとに投稿できるので、ここで質問します。私は、コマンドSBMJOBでジョブを開始する代わりの方法の1つを試しましたが、この方法ではジョブの印刷呼び出しを画面に印刷しません。 CALLコマンドで直接呼び出された場合と同じように、SBMJOBプリントを使ってジョブを起動する方法を教えてください。 –

+1

サブミットされたジョブは、ローカル・ワークステーションとは別の* batchモードで実行され、\ * nixとは異なり、オブジェクトベースのIBM iはすべてをオープンできる*ファイル*として扱いません。別のOSの場合のように他のジョブから簡単に書き込むことができます。おそらく、提供される*代替案を試してみるのが最も簡単です。とりわけ 'ADDENVVAR QIBM_MULTI_THREADED 'Y''の後に' test.pgm'を起動するために 'QSH'を使います – CRPence

1

エラーリターンコードは、関連するメッセージIDのメッセージの説明を調べると、最も簡単に解釈できます。接頭辞 'CPE'には、文字戻りコード '3029'を使用します。だから、この1のために、このコマンドを参照してください。

DSPMSGD CPE3029 

この場合、第一レベルのテキストは、「忙しいリソースです。」ですこれは、すでに使用中で、ジョブのプライマリ・スレッドに割り当てられているディスプレイ・ファイル/デバイスを参照する可能性があります(CALLは対話式ジョブで作成されたものとします)。

プログラムでは、「ILE C/C++プログラマーズ・ガイド」のChecking the Errno Valueトピックを検討することができます。ライブラリーQSYSINC内のHソース・ファイル内のERRNOメンバーも見直されなければなりません。

また、Errno Values for UNIX-Type Functionsという表はナレッジセンターにあります。