所以我是编程的新手,我想写一个带有倒计时的2048游戏。时间到时,计时器应使用pthread_kill()结束runTheGame(),这是玩游戏的功能。

我搜索了实习者,他们告诉我使用pthread_kill(functionName,SIGQUIT)。您知道我故事的其余部分:VS不了解SIGQUIT。

我知道VS不支持pthread,因此我遵循了一些指南来使其工作。除了在路径中添加.h之外,我还发现必须确保源代码以.c结尾,而不是.cpp,否则编译器会说pthread_create()的第三个参数存在一些错误。

此外,我在源代码的开头写了“ #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
}


谢谢您的帮助。

最佳答案

发布的代码缺少以下语句:

#include <signal.h>


定义信号名称的地方

SIGQUIT还导致核心转储。可能不是您想要的。建议使用:SIGTERM

关于c - 为什么当我pthread_kill(runTheGame,SIGQUIT)时,Visual Studio为何未定义“SIGQUIT” ;?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56891723/

10-11 21:09