C++多线程问题

dolpKing 2019-03-11 05:33:00
C++如何建立一个类用来管理多个线程,每个线程互不影响,各自有各自的线程函数?
...全文
163 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhh63 2019-12-16
  • 打赏
  • 举报
回复
// 开始通讯
void Car::startSocket()
{
m_pSocket = ( theApp.m_bDemo || theApp.m_bDemoCar )
? new CarDemo( this ) // 测试状态,启动Demo
: new CarSocket( this );

ASSERT( m_pSocket );
ASSERT( m_pSocket->getSocket() == INVALID_SOCKET );

// 开启线程,设置最高优先级,实时采集
CWinThread * pThread = AfxBeginThread( CarSocket::threadPro, (LPVOID)m_pSocket, THREAD_PRIORITY_TIME_CRITICAL );
m_pSocket->m_pThread = pThread;
}
tiger波波 2019-12-11
  • 打赏
  • 举报
回复
建议参考boost库的thread_group https://blog.csdn.net/hanshuobest/article/details/53984660
纵使微芒如烟 2019-12-10
  • 打赏
  • 举报
回复
就是线程池,c++11实现,非常简单
纵使微芒如烟 2019-12-10
  • 打赏
  • 举报
回复
https://github.com/gdlxSong/GdlLib/tree/master/gdltool/threadpool
  • 打赏
  • 举报
回复
厉害
worldy 2019-03-13
  • 打赏
  • 举报
回复
主线程创建若干个线程,
每个线程有一个独立的事件(通过CreateEvent创建)hEvent,(可以保存到一个数组中,每个单元实际已经对应于一个线程)
事件通过WaitForSingleObject控制线程运行,线程运行到WaitForSingleObject时,就会进入等待事件,不占用系统资源
当某个数据需要处理时,调用SetEvent,这样就可以控制和调度线程。
worldy 2019-03-12
  • 打赏
  • 举报
回复
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);

创建的线程,各线程除非你通过共享资源进行了强制的联系,否则,线程都是各自独立的,甚至多个线程你使用了相同的线程函数(不能使用全局变量)
zgl7903 2019-03-12
  • 打赏
  • 举报
回复
我一般的 从CWinThread 派生新类, 完成线程功能
CTypedPtrArray <CPtrArray, CWinThread*> 来存储线程列表
线程池参考官方文档 Thread Pools



dolpKing 2019-03-12
  • 打赏
  • 举报
回复
引用 2 楼 worldy的回复:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);

创建的线程,各线程除非你通过共享资源进行了强制的联系,否则,线程都是各自独立的,甚至多个线程你使用了相同的线程函数(不能使用全局变量)
我这个需要线程池来管理各个线程。
zgl7903 2019-03-11
  • 打赏
  • 举报
回复
可以参考下 CWinThread Class

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧