即時通訊嘗試顯示兩個不同的動畫,兩個功能,一個渲染和兩個線程。在兩個不同的線程(解決方案中沒有線程)中顯示兩個或多個不同的動畫和SDL2渲染。 C++
我每次運行代碼時都會收到不同類型的錯誤。 如:在刷新函數(SDL_RenderPresent(w1.renderer);行)中的默認分段以及其他奇怪的錯誤。每次都是不同的。
我知道它在不同的線程中使用渲染。但我不知道如何解決這個問題。
當我只用其中一個線程運行一切就OK了。但不是與他們兩個。
我只是想在窗口周圍播放不同的圖形。 (總是使用sdl2)。
這裏是我的代碼:
在window.h:
class Window
{
public:
SDL_Window *window1;
int background,windowWidth,windowHeight,windowXcoord,windowYcoord;
SDL_Renderer * renderer;
SDL_Renderer * renderer2;
Window();
};
void refresh();
extern Window w1;
window.cpp:
Window w1;
Window::Window()
{
window1=nullptr;
background = 0xffffff;
windowWidth=700; windowHeight=500;
windowXcoord = 650; windowYcoord = 0;
this->window1 =
SDL_CreateWindow("Window",windowXcoord,windowYcoord,
windowWidth,windowHeight, SDL_WINDOW_SHOWN);
this->renderer = SDL_CreateRenderer(this->window1, -1 ,
SDL_RENDERER_ACCELERATED);
SDL_SetRenderDrawColor(this->renderer, 255, 255, 255, 255);
SDL_RenderClear(this->renderer);
SDL_RenderPresent(this->renderer);
}
// this function is called everytime an object or function want to "refresh" the window.
void refresh(){
// clearing the window
SDL_SetRenderDrawColor(w1.renderer, 255, 255, 255,0);
SDL_RenderClear(w1.renderer);
// r1, the first Rects object to animate.
SDL_SetRenderDrawColor(w1.renderer,255,0,0,255);
SDL_RenderFillRect(w1.renderer, &r1.rect);
// r2, the second Rects.
SDL_SetRenderDrawColor(w1.renderer,255,0,255,255);
SDL_RenderFillRect(w1.renderer, &r2.rect);
SDL_RenderPresent(w1.renderer);
}
rects.h:
class Rects
{
public:
SDL_Rect rect;
Rects();
};
extern Rects r1, r2;
void moveR1();
void moveR2();
rects.cpp:
Rects::Rects()
{ }
Rects r1,r2;
// moveR1 and moveR2, (just some dumm animations-example)
void moveR1(){
r1.rect.x=400; r1.rect.y=100;
r1.rect.w =40; r1.rect.h =10;
SDL_SetRenderDrawColor(w1.renderer,255,0,0,255);
SDL_RenderFillRect(w1.renderer, &r1.rect);
{
for (int u = 1; u<=5;u++){
r1.rect.x=200; r1.rect.y=100;
r1.rect.w =50; r1.rect.h =50;
refresh();
for (int i = 1; i <=200; i++){
r1.rect.x-=1;
usleep (7000);
refresh();
}
}
}
}
void moveR2(){
r2.rect.x=200; r2.rect.y=100;
r2.rect.w =40; r2.rect.h =10;
SDL_SetRenderDrawColor(w1.renderer,255,255,0,255);
SDL_RenderFillRect(w1.renderer, &r2.rect);
{
for (int u = 1; u<=5;u++){
check
r2.rect.x=200; r2.rect.y=100;
r2.rect.w =50; r2.rect.h =50;
refresh();
for (int i = 1; i <=200; i++){
r2.rect.x+=1; r2.rect.y+=1;
usleep (7000);
refresh();
}
}
}
}
和主:
int main()
{
thread t1(moveR1);
t1.detach();
thread t2(moveR2);
t2.detach();
// sleep instead of showing a loop.
sleep (10);
return 0;
}
任何禮貌的幫助是值得歡迎的,這裏IM學習。
沒事!我明白了,我會嘗試沒有線程。謝謝你skypjack。 –
skypjack,我發佈了一個解決方案的靈感來自你教給我的答案。再次感謝。 –