跨平台(win和unix)的线程封装类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了跨平台(win和unix)的线程封装类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1714字,纯文字阅读大概需要3分钟。
内容图文

- #ifdef WIN32
- #include <Windows.h>
- #include <process.h>
- #else
- #include <pthread.h>
- #endif
- /*
- #ifdef WIN32
- typedef unsigned int(__stdcall *thread_func)(void*);
- #else
- typedef void*(*thread_func)(void*);
- #endif
- */
- class base_thread
- {
- public:
- base_thread();
- virtual ~base_thread();
- bool create();
- void wait();
- virtual void run() = 0;
- #ifdef WIN32
- static unsigned __stdcall thread_func(void* arg);
- #else
- static void* thread_func(void* arg);
- #endif
- protected:
- #ifdef WIN32
- HANDLE m_handle;
- #else
- pthread_t m_thread_t;
- #endif
- };
- #endif
- base_thread::base_thread()
- {
- #ifdef WIN32
- m_handle = NULL;
- #else
- m_thread_t = 0;
- #endif
- }
- base_thread::~base_thread()
- {
- #ifdef WIN32
- if (NULL != m_handle)
- {
- CloseHandle(m_handle);
- }
- m_handle = NULL;
- #else
- m_thread_t = 0;
- #endif
- }
- bool base_thread::create()
- {
- bool ret = false;
- #ifdef WIN32
- m_handle = (HANDLE)_beginthreadex(NULL, 0, thread_func, this, 0, NULL);
- if (NULL != m_handle)
- {
- ret = true;
- }
- #else
- if (0 == pthread_create(&m_thread_t, NULL, thread_func, this))
- {
- ret = true;
- }
- else
- {
- m_thread_t = 0;
- }
- #endif
- return ret;
- }
- void base_thread::wait()
- {
- #ifdef WIN32
- WaitForSingleObject(m_handle, INFINITE);
- if (NULL != m_handle)
- {
- CloseHandle(m_handle);
- }
- m_handle = NULL;
- #else
- pthread_join(m_thread_t, NULL);
- m_thread_t = 0;
- #endif // WIN32
- }
- #ifdef WIN32
- unsigned __stdcall base_thread::thread_func(void* arg)
- #else
- void* base_thread::thread_func(void* arg)
- #endif
- {
- base_thread *pthis = (base_thread*)arg;
- pthis->run();
- return NULL;
- }
封装了一个线程基类,可以在windows和linux下使用,其中run方法是要求继承的子类必须实现的,这个方法相当于线程函数,可以看到,在基类base_thread中,我在线程函数中调用了方法run。wait是用来等待线程安全退出放在主线程中卡住等待的。
原文:https://www.cnblogs.com/ostin/p/9194608.html
内容总结
以上是互联网集市为您收集整理的跨平台(win和unix)的线程封装类全部内容,希望文章能够帮你解决跨平台(win和unix)的线程封装类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。