From bd848890aa59da667feede96910105c3adab349e Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 5 Aug 2018 23:55:04 +0800 Subject: *update --- build/03Thread/03Thread.vcxproj | 134 +++++++++++++++++++++++++++ build/03Thread/03Thread.vcxproj.filters | 25 ++++++ build/03Thread/03Thread.vcxproj.user | 11 +++ build/03Thread/main.cpp | 154 ++++++++++++++++++++++++++++++++ 4 files changed, 324 insertions(+) create mode 100644 build/03Thread/03Thread.vcxproj create mode 100644 build/03Thread/03Thread.vcxproj.filters create mode 100644 build/03Thread/03Thread.vcxproj.user create mode 100644 build/03Thread/main.cpp (limited to 'build/03Thread') diff --git a/build/03Thread/03Thread.vcxproj b/build/03Thread/03Thread.vcxproj new file mode 100644 index 0000000..ddd8193 --- /dev/null +++ b/build/03Thread/03Thread.vcxproj @@ -0,0 +1,134 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {0E49D105-2032-4825-9FA1-54B1B94E3655} + My03Thread + 8.1 + + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + $(SolutionDir)..\libjin\;$(SolutionDir)\lib\SDL2-2.0.5\include\ + + + $(SolutionDir)\lib\SDL2-2.0.5\lib\x86\ + SDL2main.lib;SDL2.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies) + Console + + + + + Level3 + Disabled + true + + + + + Level3 + MaxSpeed + true + true + true + $(SolutionDir)..\libjin\;$(SolutionDir)\lib\SDL2-2.0.5\include\ + + + true + true + $(SolutionDir)\lib\SDL2-2.0.5\lib\x86\ + SDL2main.lib;SDL2.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + true + + + true + true + + + + + {407e9199-d39c-4460-b218-0c29ab42483b} + + + + + + + + + + \ No newline at end of file diff --git a/build/03Thread/03Thread.vcxproj.filters b/build/03Thread/03Thread.vcxproj.filters new file mode 100644 index 0000000..d0d38cf --- /dev/null +++ b/build/03Thread/03Thread.vcxproj.filters @@ -0,0 +1,25 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + \ No newline at end of file diff --git a/build/03Thread/03Thread.vcxproj.user b/build/03Thread/03Thread.vcxproj.user new file mode 100644 index 0000000..1b06f4b --- /dev/null +++ b/build/03Thread/03Thread.vcxproj.user @@ -0,0 +1,11 @@ + + + + $(SolutionDir)$(Configuration)\ + WindowsLocalDebugger + + + $(SolutionDir)$(Configuration)\ + WindowsLocalDebugger + + \ No newline at end of file diff --git a/build/03Thread/main.cpp b/build/03Thread/main.cpp new file mode 100644 index 0000000..ed12172 --- /dev/null +++ b/build/03Thread/main.cpp @@ -0,0 +1,154 @@ +//#include +//#include +//#include +//#include +//#include +// +//class SdlMutex +//{ +//public: +// SdlMutex() +// { +// mutex = SDL_CreateMutex(); +// if (!mutex) throw std::runtime_error("SDL_CreateMutex == NULL"); +// } +// +// ~SdlMutex() +// { +// SDL_DestroyMutex(mutex); +// } +// +// void lock() +// { +// if (SDL_mutexP(mutex) == -1) throw std::runtime_error("SDL_mutexP == -1"); +// // Note: +// // -1 does not mean it was already locked - it means there was an error in locking - +// // if it was locked it will just block - see SDL_mutexP(3) +// } +// +// void unlock() +// { +// if (SDL_mutexV(mutex) == -1) throw std::runtime_error("SDL_mutexV == -1"); +// } +// +// SDL_mutex* underlying() +// { +// return mutex; +// } +//private: +// SDL_mutex* mutex; +//}; +// +//class SdlScopedLock +//{ +//public: +// SdlScopedLock(SdlMutex& mutex) +// : +// mutex(mutex) +// { +// mutex.lock(); +// } +// ~SdlScopedLock() +// { +// try +// { +// this->unlock(); +// } +// catch (const std::exception& e) +// { +// // Destructors should never throw ... +// std::cerr << "SdlScopedLock::~SdlScopedLock - caught : " << e.what() << std::endl; +// } +// } +// void unlock() +// { +// mutex.unlock(); +// } +//private: +// SdlMutex& mutex; +//}; +// +//class ThreadData +//{ +//public: +// ThreadData() +// : +// dataReady(false), +// done(false) +// { +// condition = SDL_CreateCond(); +// } +// +// ~ThreadData() +// { +// SDL_DestroyCond(condition); +// } +// +// // Using stringstream so I can just shift on integers... +// std::stringstream data; +// bool dataReady; +// bool done; +// SdlMutex mutex; +// SDL_cond* condition; +//}; +// +//int threadFunction(void* data) +//{ +// try +// { +// ThreadData* threadData = static_cast< ThreadData* >(data); +// +// for (size_t i = 0; i < 100; i++) +// { +// { +// SdlScopedLock lock(threadData->mutex); +// // Everything in this scope is now syncronized with the mutex +// if (i != 0) threadData->data << ", "; +// threadData->data << i; +// threadData->dataReady = true; +// } // threadData->mutex is automatically unlocked here +// // Its important to note that condition should be signaled after mutex is unlocked +// if (SDL_CondSignal(threadData->condition) == -1) throw std::runtime_error("Failed to signal"); +// } +// { +// SdlScopedLock lock(threadData->mutex); +// threadData->done = true; +// } +// if (SDL_CondSignal(threadData->condition) == -1) throw std::runtime_error("Failed to signal"); +// return 0; +// } +// catch (const std::exception& e) +// { +// std::cerr << "Caught : " << e.what() << std::endl; +// return 1; +// } +//} +// +//int main(int argc, char* argv[]) +//{ +// ThreadData threadData; +// SDL_Thread* thread = SDL_CreateThread(threadFunction, "", &threadData); +// +// while (true) +// { +// SdlScopedLock lock(threadData.mutex); +// while (threadData.dataReady == false && threadData.done == false) +// { +// // NOTE: must call condition wait with mutex already locked +// if (SDL_CondWait(threadData.condition, threadData.mutex.underlying()) == -1) throw std::runtime_error("Failed to wait"); +// } +// // once dataReady == true or threadData.done == true we get here +// std::cout << "Got data = " << threadData.data.str() << std::endl; +// threadData.data.str(""); +// threadData.dataReady = false; +// if (threadData.done) +// { +// std::cout << "child done - ending" << std::endl; +// break; +// } +// } +// +// int status = 99; +// SDL_WaitThread(thread, &status); +// std::cerr << "Thread completed with : " << status << std::endl; +//} \ No newline at end of file -- cgit v1.1-26-g67d0