PIPeer important fix!

git-svn-id: svn://db.shs.com.ru/pip@115 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
2015-04-20 11:37:50 +00:00
parent f0a72b334a
commit a76aa71d8c
2 changed files with 15 additions and 9 deletions

View File

@@ -129,6 +129,7 @@ bool PIThread::start(int timer_delay) {
pthread_attr_destroy(&attr);
if (ret == 0) {
#else
if (thread != 0) CloseHandle(thread);
thread = (void *)_beginthreadex(0, 0, thread_function, this, 0, 0);
// thread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)thread_function, this, 0, 0);
if (thread != 0) {
@@ -157,7 +158,7 @@ bool PIThread::startOnce() {
pthread_attr_destroy(&attr);
if (ret == 0) {
#else
uint _id = 0;
if (thread != 0) CloseHandle(thread);
thread = (void *)_beginthreadex(0, 0, thread_function_once, this, 0, 0);
// thread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)thread_function_once, this, 0, 0);
if (thread != 0) {
@@ -194,7 +195,7 @@ void PIThread::terminate() {
}
uint __stdcall PIThread::thread_function(void * t) {
__THREAD_FUNC__ PIThread::thread_function(void * t) {
#ifndef WINDOWS
# ifndef ANDROID
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0);
@@ -235,19 +236,19 @@ uint __stdcall PIThread::thread_function(void * t) {
//cout << "thread " << t << " exiting ... " << endl;
#ifndef WINDOWS
pthread_detach(ct.thread);
#endif
ct.thread = 0;
#endif
#ifndef WINDOWS
pthread_exit(0);
#else
_endthreadex(0);
// ExitThread(0);
//ExitThread(0);
#endif
return 0;
}
uint __stdcall PIThread::thread_function_once(void * t) {
__THREAD_FUNC__ PIThread::thread_function_once(void * t) {
#ifndef WINDOWS
# ifndef ANDROID
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0);
@@ -270,13 +271,13 @@ uint __stdcall PIThread::thread_function_once(void * t) {
//cout << "thread " << t << " exiting ... " << endl;
#ifndef WINDOWS
pthread_detach(ct.thread);
#endif
ct.thread = 0;
#endif
#ifndef WINDOWS
pthread_exit(0);
#else
_endthreadex(0);
// ExitThread(0);
//ExitThread(0);
#endif
return 0;
}

View File

@@ -28,6 +28,11 @@
#include "piinit.h"
#include "pimutex.h"
#include "piobject.h"
#ifdef WINDOWS
# define __THREAD_FUNC__ uint __stdcall
#else
# define __THREAD_FUNC__ void*
#endif
typedef void (*ThreadFunc)(void * );
@@ -174,8 +179,8 @@ public:
//! \}
protected:
static uint __stdcall thread_function(void * t);
static uint __stdcall thread_function_once(void * t);
static __THREAD_FUNC__ thread_function(void * t);
static __THREAD_FUNC__ thread_function_once(void * t);
static int priority2System(PIThread::Priority p);