aboutsummaryrefslogtreecommitdiff
path: root/po/uk
Commit message (Expand)AuthorAge
* Run updatepo.shest312016-12-14
* Translated using Weblate (Ukrainian)Fixer2016-12-14
* Run updatepo.shest312016-08-30
* Run updatepo.shest312016-07-12
* Translated using Weblate (Ukrainian)Fixer2016-05-30
* Translated using Weblate (Ukrainian)Fixer2016-05-10
* Run updatepo.shest312016-05-05
* Update po files, minetest.conf.example and settings_translation_file.cppest312016-02-27
* Translated using Weblate (Ukrainian)Fixer2016-02-27
* Run util/updatepo.shest312015-11-08
* Run updatepo.shest312015-10-24
* Translated using Weblate (Ukrainian)Olexandr2015-10-05
* Translated using Weblate (Ukrainian)Olexandr2015-10-05
* Translated using Weblate (Ukrainian)Olexandr2015-10-05
* Translated using Weblate (Ukrainian)Olexandr2015-10-05
* Run updatepo.shest312015-09-12
* Run updatepo.shest312015-07-17
* Revert "Update Russian translation"Kahrl2014-12-13
* Update po filesShadowNinja2014-12-12
* Run updatepo.shPilzAdam2013-11-23
* Run updatepo.shIlya Zhuravlev2013-09-08
* Run util/updatepo.shPilzAdam2013-08-25
* Fix *.po errors caused by rebase.Ilya Zhuravlev2013-08-25
* Translated using Weblate (Ukrainian)Vladimir a2013-08-25
* Translated using Weblate (Ukrainian)sfan52013-08-25
* Fix i18n of some strings.arsdragonfly2013-07-02
* Fix Problem with uk Translationsfan52013-05-17
* Update po filesPilzAdam2013-05-13
* Translated using Weblate (Ukrainian)?????? ????????2013-05-01
* Add Ukrainian language.Ilya Zhuravlev2013-04-07
n class="hl com"> THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "jthread.h" #include <sys/time.h> #include <time.h> #include <stdlib.h> JThread::JThread() { retval = NULL; mutexinit = false; running = false; } JThread::~JThread() { Kill(); } int JThread::Start() { int status; if (!mutexinit) { if (!runningmutex.IsInitialized()) { if (runningmutex.Init() < 0) return ERR_JTHREAD_CANTINITMUTEX; } if (!continuemutex.IsInitialized()) { if (continuemutex.Init() < 0) return ERR_JTHREAD_CANTINITMUTEX; } if (!continuemutex2.IsInitialized()) { if (continuemutex2.Init() < 0) return ERR_JTHREAD_CANTINITMUTEX; } mutexinit = true; } runningmutex.Lock(); if (running) { runningmutex.Unlock(); return ERR_JTHREAD_ALREADYRUNNING; } runningmutex.Unlock(); pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); continuemutex.Lock(); status = pthread_create(&threadid,&attr,TheThread,this); pthread_attr_destroy(&attr); if (status != 0) { continuemutex.Unlock(); return ERR_JTHREAD_CANTSTARTTHREAD; } /* Wait until 'running' is set */ runningmutex.Lock(); while (!running) { runningmutex.Unlock(); struct timespec req,rem; req.tv_sec = 0; req.tv_nsec = 1000000; nanosleep(&req,&rem); runningmutex.Lock(); } runningmutex.Unlock(); continuemutex.Unlock(); continuemutex2.Lock(); continuemutex2.Unlock(); return 0; } int JThread::Kill() { runningmutex.Lock(); if (!running) { runningmutex.Unlock(); return ERR_JTHREAD_NOTRUNNING; } pthread_cancel(threadid); running = false; runningmutex.Unlock(); return 0; } bool JThread::IsRunning() { bool r; runningmutex.Lock(); r = running; runningmutex.Unlock(); return r; } void *JThread::GetReturnValue() { void *val; runningmutex.Lock(); if (running) val = NULL; else val = retval; runningmutex.Unlock(); return val; } void *JThread::TheThread(void *param) { JThread *jthread; void *ret; jthread = (JThread *)param; jthread->continuemutex2.Lock(); jthread->runningmutex.Lock(); jthread->running = true; jthread->runningmutex.Unlock(); jthread->continuemutex.Lock(); jthread->continuemutex.Unlock(); ret = jthread->Thread(); jthread->runningmutex.Lock(); jthread->running = false; jthread->retval = ret; jthread->runningmutex.Unlock(); return NULL; } void JThread::ThreadStarted() { continuemutex2.Unlock(); }