mam pewien problem na komputerze z dwurdzeniowym procesorem (na innym komputerze z jednordzeniowym procesorem kod działa jak tego oczekuje, oba na W7).
Prosty kod wątku:
KOD cpp: UKRYJ
//---------------------------------------------------------------------------
TNOLThread::TNOLThread(const char* path, bool suspend) : TThread(suspend)
{
WinExec(path, 0);
}
//---------------------------------------------------------------------------
void __fastcall TNOLThread::Execute()
{
int cpu;
TStringList* sl;
while(true){
if(FileExists("NOL")){sl = new TStringList(); sl->LoadFromFile("NOL"); cpu = StrToInt(sl->Strings[0]);
if(cpu != 0){this->ReturnValue = cpu; delete sl; break;}
else{delete sl;}
}
}
}
//---------------------------------------------------------------------------
TNOLThread::TNOLThread(const char* path, bool suspend) : TThread(suspend)
{
WinExec(path, 0);
}
//---------------------------------------------------------------------------
void __fastcall TNOLThread::Execute()
{
int cpu;
TStringList* sl;
while(true){
if(FileExists("NOL")){sl = new TStringList(); sl->LoadFromFile("NOL"); cpu = StrToInt(sl->Strings[0]);
if(cpu != 0){this->ReturnValue = cpu; delete sl; break;}
else{delete sl;}
}
}
}
//---------------------------------------------------------------------------
uruchamia mały program .net i sprawdza czy ten program zapisał wynik swojego działania do pliku, jeśli tak to ustawia ReturnValue i kończy Execute.
W konstruktorze formatki vcl tworzę ten wątek i zapomocą WaitFor czekam aż zakończy się Execute:
KOD cpp: UKRYJ
TThread* w = new TNOLThread("path",false);
int r = w.WaitFor();
int r = w.WaitFor();
Tak jak napisałem wcześniej, tan sam kod na dwóch komputerach działa inaczej. Na jednordzeniowym program nie uruchomi się zanim wątek nie skoczy działać, natomiast na dwurdzeniowym uruchomi się nawet przed stworzeniem pliku przez wywołany w wątku program. Nie wiem czy może być to spowodowane... .