C++多线程程序的设计思路

xiaochongzi630 2008-07-29 03:10:31
如果有一个很大的多线程程序,我想问一下,线程在这个程序中的设计思路是什么样的.
比如说是不是先要设计一个线程类,然后从这个线程类继承就产生了一个新的线程,生成这个类的一个对象就产生了一个线程吗.
线程间的通信是什么样的.

顺便问一下,
int pos = path.find_last_of("\\/");
是什么意思
path是一个路径,括号中的是什么意思啊.或者吗?

谢谢.
...全文
363 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin_style 2008-07-31
  • 打赏
  • 举报
回复
这个是经验上的东西,又不是技术点,怎么能两三语讲得明白
xiaochongzi630 2008-07-31
  • 打赏
  • 举报
回复
虽然对关于线程的编程不是很透,但是基本的还是了解一些,我想问一下,如果我自己去写一个线程的封装API的话,应该是一个什么样的思路,再者,如果有一个线程的封装类以后,是不是我生成这个类的一个对象就可以产生一个新的线程,我只是想知道一下,具体的在一个项目中,如果想用到多线程的话,应该是怎么样的一个设计思路,各位,麻烦讲解一下,我也看了许多关于多线程的书,不过这个思路还是不太明白.

win32的多线程和linux的多线程是不是只是API不同,基本思路是一样的?
haosuai 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xiaochongzi630 的回复:]
虽然对关于线程的编程不是很透,但是基本的还是了解一些,我想问一下,如果我自己去写一个线程的封装API的话,应该是一个什么样的思路,再者,如果有一个线程的封装类以后,是不是我生成这个类的一个对象就可以产生一个新的线程,我只是想知道一下,具体的在一个项目中,如果想用到多线程的话,应该是怎么样的一个设计思路,各位,麻烦讲解一下,我也看了许多关于多线程的书,不过这个思路还是不太明白.

win32的多线程和linux的多线程是不是…
[/Quote]
建议还是先看下操作系统把。一个线程的创建和他封装不封装没有什么关系咯,封装了还不是调用了基本的API。
主要的流程都是下面几步:
1)定义一个线程的句柄
2)创建新的线程
3)执行新线程的入口函数
4)释放这个线程
可以参照4楼的程序在看下。这里的互斥对象就不管他了,最主要的就那4步。
daohua 2008-07-31
  • 打赏
  • 举报
回复
去看基础书,建议《Windows程序设计》,第二章关于多线程的程序设计
fuzigege 2008-07-31
  • 打赏
  • 举报
回复
mark
薛定谔之死猫 2008-07-31
  • 打赏
  • 举报
回复
C++本身没有线程的概念,线程是借助操作系统引出的,使用C++的类去使用线程进行程序执行路径的并发,想怎么用就怎么用,好像没有死的套路
Gary@Tokyo 2008-07-31
  • 打赏
  • 举报
回复
mark
lin_style 2008-07-30
  • 打赏
  • 举报
回复
一个是对效率的提升
一个是对主进程的辅助
一个是对资源的控制
iwong 2008-07-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yyyapple 的回复:]
引用 6 楼 xiaochongzi630 的回复:
引用 3 楼 iidioter 的回复:
应该是找到最后的

\/ 这个字符串.

因为\需要转义,所以就变成了 \\

abcdefghi\/jklmnopqrst\/uvwxyz



可是我的路径里面没有\/这个符号啊,要么是\\,要么是/


匹配其中一个
[/Quote]这才是正解。
hunet1985 2008-07-30
  • 打赏
  • 举报
回复
线程是操作系统中的一个概念,我觉得你首先要弄懂这个概念。

如果你在windows平台下的话,建立再去看看Win32 API中对线程的支持,这个可以在MSDN
中找到。

最后再用C++类的概念去封装一个你自己的线程类。
yyyapple 2008-07-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiaochongzi630 的回复:]
引用 3 楼 iidioter 的回复:
应该是找到最后的

\/ 这个字符串.

因为\需要转义,所以就变成了 \\

abcdefghi\/jklmnopqrst\/uvwxyz



可是我的路径里面没有\/这个符号啊,要么是\\,要么是/
[/Quote]

匹配其中一个
ronliu 2008-07-30
  • 打赏
  • 举报
回复
唉,多线程的调试
R_hgt 2008-07-30
  • 打赏
  • 举报
回复
MARK
xiaochongzi630 2008-07-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iidioter 的回复:]
应该是找到最后的

\/ 这个字符串.

因为\需要转义,所以就变成了 \\

abcdefghi\/jklmnopqrst\/uvwxyz
[/Quote]


可是我的路径里面没有\/这个符号啊,要么是\\,要么是/
微澜- 2008-07-30
  • 打赏
  • 举报
回复
编程就像做人,咋走都可以,如果想长大,必须学会独立,这就是我的经验。
zsxcn 2008-07-29
  • 打赏
  • 举报
回复
mark
wangdeqie 2008-07-29
  • 打赏
  • 举报
回复

//这是一个创建双线程的简单小程序,你可以参考下
#include <windows.h>
#include <iostream.h>

DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data

HANDLE hMutex;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
//创建线程

hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);

//创建互斥对象
hMutex=CreateMutex(NULL,TRUE,NULL);
if (hMutex)
{
if (ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only one instance can run!"<<endl;
return;
}
}
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);

Sleep(4000);
}
//线程1的入口函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data
{
//函数实现..................
return 0;
}
//线程2的入口函数
DWORD WINAPI Fun2Proc(LPVOID lpParameter)//thread data
{
//函数实现..................
return 0;
}
iBug168 2008-07-29
  • 打赏
  • 举报
回复
应该是找到最后的

\/ 这个字符串.

因为\需要转义,所以就变成了 \\

abcdefghi\/jklmnopqrst\/uvwxyz
coverallwangp 2008-07-29
  • 打赏
  • 举报
回复
找到最后一个/的位置
\\应该是转义符
独孤过儿 2008-07-29
  • 打赏
  • 举报
回复
你应该从最基础的东西看起...

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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