0

次のメインプログラムがあります。

int main(int argc, char** argv) {

    /*checkParameters(argc,argv);*/

    if (pthread_create(&supplierid, NULL, &supplier, NULL) != 0);
        error("ERROR creating supply threads \n");

}

void *supplier () {

    printf("hello? \n"); 

    while (timeremaining >= 0) {


        printf("\n the stock is %d" , stock);
        printf("\n the supply ies %d", supply);

        timeremaining--;

        if (stock + supply > cap_max)
            stock = cap_max;
        else
            stock = stock + supply;

        sleep(0.1);
    }

    exit(EXIT_SUCCESS);
}

わかりました、このプログラムを実行する時間の 95% で、サプライ スレッドの作成中にエラーが発生します。そして、それは決して hello を出力しません。これは意味がありません。たったの1スレッドです。

前もって感謝します。

4

1 に答える 1

3

ifステートメントの後にセミコロンがあります。

if (pthread_create(&supplierid, NULL, &supplier, NULL) != 0);

これは、ステートメント内にネストされているように見えるifステートメントが、実際にはまったくネストされておらず、条件に関係なく常に実行されることを意味します。具体的には、C はコードを次のように解釈しています。

if (pthread_create(&supplierid, NULL, &supplier, NULL) != 0)
    ; /* Do nothing */

error("ERROR creating supply threads \n");

これを修正するには、不要なセミコロンを削除します。

お役に立てれば!

于 2013-02-07T23:16:39.987 に答える