ソス@ソスソスソスNソスソスソスXソスソスソスソスソスoソスヨ撰ソスソスソスCreateThreadソスナ趣ソスソスsソスソスソスソスソスソスノは?
|
ソスEC/C++
ソスEDelphi
ソスEVisual BasicソスソスソスSソスソス
ソス@(VB2-VB6ソスソス.NETソスソスソスp)
ソスEVisual Basic(VB2-VB6)
ソスEVisual Basic .NET
ソスEVisual C++
ソスEpapy's softwarelibrary
staticソスナなゑソスprivateソスソスソスソスソスoソスヨ撰ソスソスソスCreateThreadソスネどで趣ソスソスsソスソスソスソスソスソスノはどゑソスソスソスソスソスソスソス謔「ソスフでゑソスソス蛯、ソスソスソスH
privateソスナなゑソスソスソスソスstaticソスネソスソスソスソスoソスヨ撰ソスソスソスソスソスソスソスソスソスノ具ソスソス゚ばよいソスニ思ソスソスソスフでゑソスソスソスソスAprivateソスソスソスニ擾ソス閧ュソスソスソスソスソスワゑソスソスソスB
- ソスソスソスフクソスソスソスXソスフソスソス¥ソスbソスhソスソスソスCreateThreadソスソスソスソスB
- Threadソスノ必ソスvソスネ茨ソスソスソスソスソスstructソスノまとめ、ソスソスソスフ抵ソスソスソスthisソスソスソスソスソストゑソスソスソスソスA
friendソスソスソストゑソスソスソスソスB
ソスソスソスソスソスソスソスワゑソスソスソスソスナゑソスソスソスソスAソスソスソス竭ォ
-ソスXソスソスソスbソスhソスヨ撰ソスソスソスナは渡ソスソスソス黷スthis(ソスツまゑソスNソスソスソスXソスフイソスソスソスXソス^ソスソスソスX)
ソス@ソスフソスソスソスソスoソスヨ撰ソス(staticソスナなゑソスprivateソスヨ撰ソス)ソスソストべまゑソスソスB
ソスXソスソスソスbソスhソスヨ撰ソスソスソスfriendソスノゑソスソストまゑソスソスソスソスソスヒ。
ソスソス friendソスソスソスソスナゑソスソスソスソスネらおソスソスソスソスソスソスソスB
#include <iostream>
#include <windows.h>
struct FactorialArgs;
class Factorial {
private:
int result_;
// ソスXソスソスソスbソスhソス{ソスソス
void execute(int n) {
int f = 1;
for ( int i = 1; i < n; ++i ) {
f *= i;
}
result_ = f;
}
public:
FactorialArgs* make_args(int n);
static void run(void* v);
int result() const { return result_; }
};
// ソスXソスソスソスbソスhソスノ茨ソスソスソスソスnソスソスソスソスソスソス
struct FactorialArgs {
int n;
Factorial* instance;
};
// ソスソスソスソスソスソス
FactorialArgs* Factorial::make_args(int n) {
FactorialArgs* result = new FactorialArgs();
result->n = n;
result->instance = this;
return result;
}
// ソスXソスソスソスbソスhソスEソスGソスソスソスgソスソス
// ソスソスソスソスソスソスソスソス private ソスソス Factorial::execute ソスソストゑソス
void Factorial::run(void* v) {
FactorialArgs& args = *static_cast<FactorialArgs*>(v);
args.instance->execute(args.n);
}
int main() {
Factorial fact0;
Factorial fact1;
FactorialArgs* args0 = fact0.make_args(5);
FactorialArgs* args1 = fact1.make_args(7);
HANDLE handle[] = {
CreateThread(NULL, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(&Factorial::run), args0, 0, NULL),
CreateThread(NULL, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(&Factorial::run), args1, 0, NULL),
};
WaitForMultipleObjects(2, handle, TRUE, INFINITE);
std::cout << "5! = " << fact0.result() << std::endl;
std::cout << "7! = " << fact1.result() << std::endl;
delete args0;
delete args1;
}
ソスソスソス[ソスソスAソスソスソスフコソス[ソスhソスヘゑソスソスワゑソスソスワ具ソスRソスソスソスメ通ゑソスノ難ソスソスソスソストゑソスソス驍セソスソスソスソスソスニ。
__stdcall (THREAD_START_ROUTINE) ソスKソスソスソス
__cdecl (static ソスソスソスソスソスoソスヨ撰ソス) ソスKソスソスソス
ソスナは、ソスソスソスソスソスソスソスソスソスoソスCソスiソスソスソスソスソスxソスソスソスナのコソス[ソスソスソスEソスソスソス^ソス[ソスソスソス闖ソスソスソス痰、ソスフでゑソスソスワゑソスソスネゑソスソスB
static void run(void*); ソスソスfソスソスソスソス THREAD_START_ROUTINE ソスノ適ソスソスソスソスソスソス謔、
static DWORD __stdcall run(void*); ソスノ修ソスソスソスソスソスソス
ソスsソスKソスvソスソス reinterpret_cast ソスヘ擾ソスソスソスソスソス
run ソスフ最鯉ソスソス return 0; ソスナゑソスヌ会ソスソスソスソストゑソスソスソスソスルゑソスソスソスソス謔「ソスニ思ソスソスソスB
> ソスRソス[ソスソスソスEソスソスソス^ソス[ソスソスソス闖ソスソスソス痰、ソスフでゑソスソスワゑソスソスネゑソスソスB
ソスソスソス[ソスBソスじゑソスソスソスソスリゑソスB
#include <iostream>
#include <windows.h>
struct FactorialArgs;
class Factorial {
private:
int result_;
// ソスXソスソスソスbソスhソス{ソスソス
void execute(int n) {
int f = 1;
for ( int i = 1; i < n; ++i ) {
f *= i;
}
result_ = f;
}
public:
FactorialArgs* make_args(int n);
static DWORD __stdcall run(void* v);
int result() const { return result_; }
};
// ソスXソスソスソスbソスhソスノ茨ソスソスソスソスnソスソスソスソスソスソス
struct FactorialArgs {
int n;
Factorial* instance;
};
// ソスソスソスソスソスソス
FactorialArgs* Factorial::make_args(int n) {
FactorialArgs* result = new FactorialArgs();
result->n = n;
result->instance = this;
return result;
}
// ソスXソスソスソスbソスhソスEソスGソスソスソスgソスソス
// ソスソスソスソスソスソスソスソス private ソスソス Factorial::execute ソスソストゑソス
DWORD __stdcall Factorial::run(void* v) {
FactorialArgs& args = *static_cast<FactorialArgs*>(v);
args.instance->execute(args.n);
return 0;
}
int main() {
Factorial fact0;
Factorial fact1;
FactorialArgs* args0 = fact0.make_args(5);
FactorialArgs* args1 = fact1.make_args(7);
HANDLE handle[] = {
CreateThread(NULL, 0, &Factorial::run, args0, 0, NULL),
CreateThread(NULL, 0, &Factorial::run, args1, 0, NULL),
};
WaitForMultipleObjects(2, handle, TRUE, INFINITE);
std::cout << "5! = " << fact0.result() << std::endl;
std::cout << "7! = " << fact1.result() << std::endl;
delete args0;
delete args1;
}
ソスルゑソスニゑソスCreateThread()ソスナ良ゑソスソスフゑソスソスうソスソスソスニゑソスソスソス
ソスSソスzソスソスソスソスソスワゑソスソスソスソス(vv;)ソスB
ソスソスソスCソスソスソスソスソス^ソスCソスソスソスソスMFCソスソスソスソスソスpソスナゑソスソスソスAソスナゑソスソスネゑソスソスソスソスソスハゑソスニゑソスソスソスソスB
ソスソスソスソスソスBソスソスソスソス CreateThread ソスソスソスソスフまま使ソスソスソスソスソスソスソスニはなゑソスソスソスソスソスソスB
ソスソスyソスNソスノゑソスソスソス _beginthread(ex) ソスワゑソスソスソス AfxBeginThread ソスソスgソスソスソス謔、ソスノ指ソスソスソスソスソストゑソスソスソスナゑソスソスB
ソスネ会ソスソスヘ蛇托ソス
x86 ソスソス __stdcall, __cdecl, __thiscall ソスソスソスFソス痰、ソスだゑソスソスソス
x64 ソスヘ趣ソスソスソス __fastcall ソスソスソスノなゑソスソスソスソス轤オソスソスソスB
x64 ソスソス setjmp/longjmp ソスヘアソスソスソスソスソスCソスソスソスhソスノなゑソス轤オソスソスソスEソスEソスEソスソスソス轤「ソス痰「ソスソスソスB
ソスFソスソスソスソスAソスヌゑソスソスソスソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスソスソスB
ソスニりあソスソスソスソスソスAfriendソスソスgソスソスソストみるこソスニにゑソスソスワゑソスソスソスソスB
ソス}ソスソスソス`ソスXソスソスソスbソスhソスヘ、ソスソスソスソスソスしソスソスソスナゑソスソスcソスc