Почему моя Visual Studio говорит, что «SIGQUIT» не определен, когда я pthread_kill (runTheGame, SIGQUIT) ;? - PullRequest
0 голосов
/ 04 июля 2019

Итак, я новичок в программировании и хочу написать игру 2048 с обратным отсчетом времени.Когда время истекло, таймер должен использовать pthread_kill (), чтобы завершить runTheGame (), которая является функцией игры в игру.

Я искал интернет, и они говорят мне использовать pthread_kill (functionName, SIGQUIT).И вы знаете остальную часть моей истории: VS не знает SIGQUIT.

Я знаю, VS не поддерживает pthread, поэтому я следовал некоторым руководствам, чтобы заставить его работать.Помимо добавления .h в путь, я обнаружил, что должен убедиться, что источник заканчивается на .c, а не .cpp, иначе компилятор скажет, что есть некоторые ошибки с третьим параметром с pthread_create ().

* 1006Кроме того, я написал "#pragma comment (lib," pthreadVC2.lib ")" в начале моего источника.Если я не сделаю этого, то возникнут другие проблемы.

После всей этой подготовки я успешно запускаю программу, которая подсчитывает, сколько символов было выполнено _getch () при вычислении истекших секунд одновременно в другом потоке.

Вся эта информация служит для доказательства того, что я (частично) правильно установил pthread.h в VS.Я думал, что мой pthread будет работать хорошо, бог знает, какого черта он сейчас что-то не так.

#pragma comment(lib,"pthreadVC2.lib")
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<pthread.h>
#include<string.h>
#include<time.h>
pthread_t runTheGame;
//***unneccessary code is hidden***
void timerTick()//function for doing countdown
{
    for (;;)
    {
        restTime--;
        if (restTime <= 0)
        {
            pthread_kill(runTheGame,SIGQUIT);//VS doesn't recognize the SIGQUIT
            if (score >= goalOfLevel[arcadeLevel - 1])
            {
                //code is not written yet
            }
        }
        _sleep(1000);
    }
}
//***unneccessary code is hidden***
void gameRunning()//Real game loop. Run by pthread_create().
{
    //***unneccessary code is hidden***
}
//***unneccessary code is hidden***
void game(int arcade)//function for initializing the game
{
    arcadeLevel = arcade;
    boardRange = 4;
    oversize = 2048;
    score = 0;
    revive = 0;
    doubleScoreOrNot = 1;
    if (arcadeLevel > 0)
    {
        restTime = timeOfLevel[arcadeLevel - 1];
        if (passivePower[0] == 1)
        {
            boardRange++;
        }
        if (passivePower[1] == 1)
        {
            revive = 1;
        }
        if (passivePower[3] == 1)
        {
            oversize = 1024;
        }
        if (passivePower[4] == 1)
        {
            score=goalOfLevel[arcadeLevel-1]/10;
        }
        if (passivePower[5] == 1)
        {
            restTime += restTime /20*3;
        }
        if (passivePower[7] == 1)
        {
            boardRange--;
            doubleScoreOrNot = 2;
        }
    }
    pthread_create(&runTheGame, NULL, gameRunning, NULL);//after all these initialization, real game starts here
}

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 04 июля 2019

В опубликованном коде отсутствует утверждение:

#include <signal.h>

где определены имена сигналов

SIGQUIT также вызывает дамп ядра. Наверное, не то, что вы хотите. Предложить использование: SIGTERM

...