1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#include "stdafx.h"
#include "TObject.h"
namespace storm {
TObject::TObject(Thread *t) : thread(t) {}
Str *TObject::toS() const {
return RootObject::toS();
}
void TObject::toS(StrBuf *buf) const {
RootObject::toS(buf);
}
Str *threadSafeToS(RootObject *obj) {
if (TObject *tObj = as<TObject>(obj)) {
Thread *thread = tObj->associatedThread();
const os::Thread &osThread = thread->thread();
if (osThread != os::Thread::current()) {
os::Future<Str *> result;
os::FnCall<Str *, 1> call = os::fnCall().add(tObj);
Str *(CODECALL TObject::*ptr)() const = &TObject::toS;
os::UThread::spawn(address(ptr), true, call, result, &osThread);
return result.result();
} else {
return obj->toS();
}
} else {
return obj->toS();
}
}
}
|