|
Toshihiro Shimizu |
890ddd |
#include "igs_resource_thread.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "igs_resource_multithread.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
namespace
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
#if defined _WIN32 // vc compile_type
|
|
Toshihiro Shimizu |
890ddd |
unsigned __stdcall
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
void *
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
function_(void *param)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
igs::resource::thread_execute_interface *pp =
|
|
Toshihiro Shimizu |
890ddd |
static_cast<
|
|
Toshihiro Shimizu |
890ddd |
igs::resource::thread_execute_interface *>(param);
|
|
Toshihiro Shimizu |
890ddd |
pp->run();
|
|
Toshihiro Shimizu |
890ddd |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void igs::resource::multithread::add(void *thread_execute_instance)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
this->thre_exec_.push_back(thread_execute_instance);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void igs::resource::multithread::run(void)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (1 == this->thre_exec_.size()) {
|
|
Toshihiro Shimizu |
890ddd |
/* 指定が一個の場合はスレッド実行せず、ただ実行 */
|
|
Toshihiro Shimizu |
890ddd |
igs::resource::thread_execute_interface *pp =
|
|
Toshihiro Shimizu |
890ddd |
static_cast<
|
|
Toshihiro Shimizu |
890ddd |
igs::resource::thread_execute_interface *>(
|
|
Toshihiro Shimizu |
890ddd |
this->thre_exec_.at(0));
|
|
Toshihiro Shimizu |
890ddd |
pp->run();
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// pthread_t = unsigned long int(rhel4)
|
|
Toshihiro Shimizu |
890ddd |
// HANDLE = unsigned long(vc6.0) = void *(vc2005)
|
|
Toshihiro Shimizu |
890ddd |
#if defined _WIN32 // vc compile_type
|
|
Toshihiro Shimizu |
890ddd |
std::vector<HANDLE> id;
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
std::vector<pthread_t> id;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
std::vector<void *>::iterator it;
|
|
Toshihiro Shimizu |
890ddd |
for (it = this->thre_exec_.begin();
|
|
Toshihiro Shimizu |
890ddd |
it != this->thre_exec_.end(); ++it) {
|
|
Toshihiro Shimizu |
890ddd |
id.push_back(igs::resource::thread_run(function_, *it));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
#if defined _WIN32 // vc compile_type
|
|
Toshihiro Shimizu |
890ddd |
std::vector<HANDLE>::iterator it;
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
std::vector<pthread_t>::iterator it;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
for (it = id.begin(); it != id.end(); ++it) {
|
|
Toshihiro Shimizu |
890ddd |
igs::resource::thread_join(*it);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
id.clear();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
void igs::resource::multithread::clear(void)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
this->thre_exec_.clear();
|
|
Toshihiro Shimizu |
890ddd |
}
|