问题描述
如何使用 NSThread 将类作为参数传递给线程。在 Windows 中,我正在做类似的事情:
try
{
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering");
using (ManagementObjectCollection managementObjectCollection = searcher.Get())
{
ManagementObject managementObject = managementObjectCollection.OfType<ManagementObject>().First();
string stringDate = managementObject["InstalledOn"].ToString();
string format = "M/d/yyyy";
CultureInfo provider = CultureInfo.InvariantCulture;
DateTimeOffset result = new DateTimeOffset();
result = DateTimeOffset.ParseExact(stringDate,format,provider,DateTimeStyles.AssumeUniversal);
systemLastwindowsUpdate = result.ToString("yyyy-MM-dd");
}
}
catch (Exception)
{
MessageBox.Show("Problem in Windows Update");
}
对于 Mac,我还没有找到任何此类示例。请帮帮我
解决方法
我找到了解决方案,它可以像 windows
class CLS_CPP {
public:
void Func();
void Check();
int var_check;
};
@interface CLS_OSX : NSObject {
@public
void *obj;
}
-(void)osx_thread;
@end
@implementation CLS_OSX
-(void)osx_thread {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CLS_CPP *pThis = reinterpret_cast<CLS_CPP*>(obj);
pThis->Check();
NSLog(@"Check var %d",pThis->var_check);
[NSThread exit];
[pool drain];
}
@end
void CLS_CPP::Func() {
var_check=77;
CLS_OSX *trgt=[[CLS_OSX alloc] init];
trgt->obj=(void*)this;
[NSThread detachNewThreadSelector:@selector(osx_thread) toTarget:trgt withObject:trgt];
}
void CLS_CPP::Check() {
NSLog(@"CLS_CPP::Check success");
}
int main(int argc,char ** argv) {
CLS_CPP oAPP;
oAPP.Func();
}