Commit 235e9600 authored by fallenstardust's avatar fallenstardust

use standard thread library

parent bb0c534d
...@@ -82,6 +82,7 @@ inline int _wtoi(const wchar_t * s) { ...@@ -82,6 +82,7 @@ inline int _wtoi(const wchar_t * s) {
#include <stdlib.h> #include <stdlib.h>
#include <memory.h> #include <memory.h>
#include <time.h> #include <time.h>
#include <thread>
#ifdef _IRR_ANDROID_PLATFORM_ #ifdef _IRR_ANDROID_PLATFORM_
#include <android/bufferio_android.h> #include <android/bufferio_android.h>
#else #else
...@@ -89,7 +90,6 @@ inline int _wtoi(const wchar_t * s) { ...@@ -89,7 +90,6 @@ inline int _wtoi(const wchar_t * s) {
#endif #endif
#include "mymutex.h" #include "mymutex.h"
#include "mysignal.h" #include "mysignal.h"
#include "mythread.h"
#include "../ocgcore/ocgapi.h" #include "../ocgcore/ocgapi.h"
#include "../ocgcore/common.h" #include "../ocgcore/common.h"
......
...@@ -67,7 +67,7 @@ bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_g ...@@ -67,7 +67,7 @@ bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_g
event* resp_event = event_new(client_base, 0, EV_TIMEOUT, ConnectTimeout, 0); event* resp_event = event_new(client_base, 0, EV_TIMEOUT, ConnectTimeout, 0);
event_add(resp_event, &timeout); event_add(resp_event, &timeout);
} }
Thread::NewThread(ClientThread, 0); std::thread(ClientThread).detach();
return true; return true;
} }
void DuelClient::ConnectTimeout(evutil_socket_t fd, short events, void* arg) { void DuelClient::ConnectTimeout(evutil_socket_t fd, short events, void* arg) {
...@@ -223,7 +223,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) { ...@@ -223,7 +223,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
event_base_loopexit(client_base, 0); event_base_loopexit(client_base, 0);
} }
} }
int DuelClient::ClientThread(void* param) { int DuelClient::ClientThread() {
event_base_dispatch(client_base); event_base_dispatch(client_base);
bufferevent_free(client_bev); bufferevent_free(client_bev);
event_base_free(client_base); event_base_free(client_base);
...@@ -3947,7 +3947,7 @@ void DuelClient::BeginRefreshHost() { ...@@ -3947,7 +3947,7 @@ void DuelClient::BeginRefreshHost() {
timeval timeout = {3, 0}; timeval timeout = {3, 0};
resp_event = event_new(broadev, reply, EV_TIMEOUT | EV_READ | EV_PERSIST, BroadcastReply, broadev); resp_event = event_new(broadev, reply, EV_TIMEOUT | EV_READ | EV_PERSIST, BroadcastReply, broadev);
event_add(resp_event, &timeout); event_add(resp_event, &timeout);
Thread::NewThread(RefreshThread, broadev); std::thread(RefreshThread, broadev).detach();
//send request //send request
SOCKADDR_IN local; SOCKADDR_IN local;
local.sin_family = AF_INET; local.sin_family = AF_INET;
...@@ -3993,8 +3993,7 @@ void DuelClient::BeginRefreshHost() { ...@@ -3993,8 +3993,7 @@ void DuelClient::BeginRefreshHost() {
} }
#endif #endif
} }
int DuelClient::RefreshThread(void * arg) { int DuelClient::RefreshThread(event_base* broadev) {
event_base* broadev = (event_base*)arg;
event_base_dispatch(broadev); event_base_dispatch(broadev);
evutil_socket_t fd; evutil_socket_t fd;
event_get_assignment(resp_event, 0, &fd, 0, 0, 0); event_get_assignment(resp_event, 0, &fd, 0, 0, 0);
......
...@@ -43,7 +43,7 @@ public: ...@@ -43,7 +43,7 @@ public:
static void StopClient(bool is_exiting = false); static void StopClient(bool is_exiting = false);
static void ClientRead(bufferevent* bev, void* ctx); static void ClientRead(bufferevent* bev, void* ctx);
static void ClientEvent(bufferevent *bev, short events, void *ctx); static void ClientEvent(bufferevent *bev, short events, void *ctx);
static int ClientThread(void* param); static int ClientThread();
static void HandleSTOCPacketLan(char* data, unsigned int len); static void HandleSTOCPacketLan(char* data, unsigned int len);
static int ClientAnalyze(char* msg, unsigned int len); static int ClientAnalyze(char* msg, unsigned int len);
static void SwapField(); static void SwapField();
...@@ -80,7 +80,7 @@ protected: ...@@ -80,7 +80,7 @@ protected:
public: public:
static std::vector<HostPacket> hosts; static std::vector<HostPacket> hosts;
static void BeginRefreshHost(); static void BeginRefreshHost();
static int RefreshThread(void* arg); static int RefreshThread(event_base* broadev);
static void BroadcastReply(evutil_socket_t fd, short events, void* arg); static void BroadcastReply(evutil_socket_t fd, short events, void* arg);
}; };
......
...@@ -1767,9 +1767,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1767,9 +1767,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
display_cards.push_back(*oit); display_cards.push_back(*oit);
} }
} }
break;
case irr::KEY_BACK:
break; break;
} }
if(display_cards.size()) { if(display_cards.size()) {
......
...@@ -1093,10 +1093,10 @@ void Game::MainLoop() { ...@@ -1093,10 +1093,10 @@ void Game::MainLoop() {
driver->endScene(); driver->endScene();
if(closeSignal.Wait(0)) if(closeSignal.Wait(0))
CloseDuelWindow(); CloseDuelWindow();
if(!device->isWindowActive())
ignore_chain = false;
fps++; fps++;
cur_time = timer->getTime(); cur_time = timer->getTime();
if(cur_time < fps * 17 - 20)
std::this_thread::sleep_for(std::chrono::milliseconds(20));
if(cur_time >= 1000) { if(cur_time >= 1000) {
#ifdef _IRR_ANDROID_PLATFORM_ #ifdef _IRR_ANDROID_PLATFORM_
......
#ifndef THREAD_H
#define THREAD_H
#ifdef _WIN32
#include <windows.h>
class Thread {
public:
static void NewThread(int (*thread_func)(void*), void* param) {
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)thread_func, param, 0, 0);
}
};
#else // _WIN32
#include <pthread.h>
#ifdef __IRR_ANDROID_PLATFORM_
#include <sys/resource.h>
#endif
class Thread {
public:
static void NewThread(int (*thread_func)(void*), void* param) {
pthread_t thread;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&thread, &attr, (void * (*)(void *))thread_func, param);
#ifdef __IRR_ANDROID_PLATFORM_
//10 for THREAD_PRIORITY_BACKGROUND
setpriority(PRIO_PROCESS, tid, 10);
#endif
}
};
#endif // _WIN32
#endif // THREAD_H
...@@ -33,7 +33,7 @@ bool NetServer::StartServer(unsigned short port) { ...@@ -33,7 +33,7 @@ bool NetServer::StartServer(unsigned short port) {
return false; return false;
} }
evconnlistener_set_error_cb(listener, ServerAcceptError); evconnlistener_set_error_cb(listener, ServerAcceptError);
Thread::NewThread(ServerThread, net_evbase); std::thread(ServerThread).detach();
return true; return true;
} }
bool NetServer::StartBroadcast() { bool NetServer::StartBroadcast() {
...@@ -136,7 +136,7 @@ void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) { ...@@ -136,7 +136,7 @@ void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) {
else DisconnectPlayer(dp); else DisconnectPlayer(dp);
} }
} }
int NetServer::ServerThread(void* param) { int NetServer::ServerThread() {
event_base_dispatch(net_evbase); event_base_dispatch(net_evbase);
for(auto bit = users.begin(); bit != users.end(); ++bit) { for(auto bit = users.begin(); bit != users.end(); ++bit) {
bufferevent_disable(bit->first, EV_READ); bufferevent_disable(bit->first, EV_READ);
......
...@@ -33,7 +33,7 @@ public: ...@@ -33,7 +33,7 @@ public:
static void ServerAcceptError(evconnlistener *listener, void* ctx); static void ServerAcceptError(evconnlistener *listener, void* ctx);
static void ServerEchoRead(bufferevent* bev, void* ctx); static void ServerEchoRead(bufferevent* bev, void* ctx);
static void ServerEchoEvent(bufferevent* bev, short events, void* ctx); static void ServerEchoEvent(bufferevent* bev, short events, void* ctx);
static int ServerThread(void* param); static int ServerThread();
static void DisconnectPlayer(DuelPlayer* dp); static void DisconnectPlayer(DuelPlayer* dp);
static void HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len); static void HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len);
static void SendPacketToPlayer(DuelPlayer* dp, unsigned char proto) { static void SendPacketToPlayer(DuelPlayer* dp, unsigned char proto) {
......
...@@ -24,7 +24,7 @@ bool ReplayMode::StartReplay(int skipturn) { ...@@ -24,7 +24,7 @@ bool ReplayMode::StartReplay(int skipturn) {
skip_turn = skipturn; skip_turn = skipturn;
if(skip_turn < 0) if(skip_turn < 0)
skip_turn = 0; skip_turn = 0;
Thread::NewThread(ReplayThread, 0); std::thread(ReplayThread).detach();
return true; return true;
} }
void ReplayMode::StopReplay(bool is_exiting) { void ReplayMode::StopReplay(bool is_exiting) {
...@@ -56,7 +56,7 @@ bool ReplayMode::ReadReplayResponse() { ...@@ -56,7 +56,7 @@ bool ReplayMode::ReadReplayResponse() {
set_responseb(pduel, resp); set_responseb(pduel, resp);
return result; return result;
} }
int ReplayMode::ReplayThread(void* param) { int ReplayMode::ReplayThread() {
const ReplayHeader& rh = cur_replay.pheader; const ReplayHeader& rh = cur_replay.pheader;
mainGame->dInfo.isFirst = true; mainGame->dInfo.isFirst = true;
mainGame->dInfo.isTag = !!(rh.flag & REPLAY_TAG); mainGame->dInfo.isTag = !!(rh.flag & REPLAY_TAG);
......
...@@ -32,7 +32,7 @@ public: ...@@ -32,7 +32,7 @@ public:
static void SwapField(); static void SwapField();
static void Pause(bool is_pause, bool is_step); static void Pause(bool is_pause, bool is_step);
static bool ReadReplayResponse(); static bool ReadReplayResponse();
static int ReplayThread(void* param); static int ReplayThread();
static bool StartDuel(); static bool StartDuel();
static void EndDuel(); static void EndDuel();
static void Restart(bool refresh); static void Restart(bool refresh);
......
...@@ -12,7 +12,7 @@ bool SingleMode::is_continuing = false; ...@@ -12,7 +12,7 @@ bool SingleMode::is_continuing = false;
Replay SingleMode::last_replay; Replay SingleMode::last_replay;
bool SingleMode::StartPlay() { bool SingleMode::StartPlay() {
Thread::NewThread(SinglePlayThread, 0); std::thread(SinglePlayThread).detach();
return true; return true;
} }
void SingleMode::StopPlay(bool is_exiting) { void SingleMode::StopPlay(bool is_exiting) {
...@@ -28,7 +28,7 @@ void SingleMode::SetResponse(unsigned char* resp, unsigned int len) { ...@@ -28,7 +28,7 @@ void SingleMode::SetResponse(unsigned char* resp, unsigned int len) {
last_replay.WriteData(resp, len); last_replay.WriteData(resp, len);
set_responseb(pduel, resp); set_responseb(pduel, resp);
} }
int SingleMode::SinglePlayThread(void* param) { int SingleMode::SinglePlayThread() {
const int start_lp = 8000; const int start_lp = 8000;
const int start_hand = 5; const int start_hand = 5;
const int draw_count = 1; const int draw_count = 1;
......
...@@ -15,7 +15,7 @@ public: ...@@ -15,7 +15,7 @@ public:
static bool StartPlay(); static bool StartPlay();
static void StopPlay(bool is_exiting = false); static void StopPlay(bool is_exiting = false);
static void SetResponse(unsigned char* resp, unsigned int len); static void SetResponse(unsigned char* resp, unsigned int len);
static int SinglePlayThread(void* param); static int SinglePlayThread();
static bool SinglePlayAnalyze(char* msg, unsigned int len); static bool SinglePlayAnalyze(char* msg, unsigned int len);
static void SinglePlayRefresh(int flag = 0xf81fff); static void SinglePlayRefresh(int flag = 0xf81fff);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment