Итак, я новичок в программировании и хочу написать игру 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
}
Спасибо за вашу помощь.