社区
进程/线程/DLL
帖子详情
你能写个多线程的小程序吗?
Begin__End
2001-08-31 09:44:34
我是个初学者,现在想学习多线程方面的知识,看了些理论,可没有实践。
各位能否写个多线程的小程序(比在对话框中,两个进度条,用两个线程实现)。其它的也可以。
写了烦mail : begin_end@china.com
分一定给。真的很感谢。现在只能给这么多分,以后一定加上。
...全文
207
19
打赏
收藏
你能写个多线程的小程序吗?
我是个初学者,现在想学习多线程方面的知识,看了些理论,可没有实践。 各位能否写个多线程的小程序(比在对话框中,两个进度条,用两个线程实现)。其它的也可以。 写了烦mail : begin_end@china.com 分一定给。真的很感谢。现在只能给这么多分,以后一定加上。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
use_id
2001-08-31
打赏
举报
回复
up
use_id
2001-08-31
打赏
举报
回复
言归正传,pitchstar(lsy) 能否帮我传个VC的多线程小例子来。
尹妹儿在上面。
不要那么复杂吧。
小程序对大家来说,该是小菜一碟。再次谢了。
lixuyu
2001-08-31
打赏
举报
回复
up
fmding
2001-08-31
打赏
举报
回复
gz
use_id
2001-08-31
打赏
举报
回复
关注
pitchstar
2001-08-31
打赏
举报
回复
刚才上边的就是啊,我完整拷贝来下来的。。。编译通过
Begin__End
2001-08-31
打赏
举报
回复
言归正传,pitchstar(lsy) 能否帮我传个VC的多线程小例子来。
尹妹儿在上面。
pitchstar
2001-08-31
打赏
举报
回复
抄一段,《windows 核心编程》p134。
start
下面是关于 _beginthreadex 的一些要点:
-- 每个线程均获得由 c/c++ 运行期库的堆栈分配的自己的 tiddata 内存结构。
-- 传递给_beginthreadex 的线程函数地址保存在 tiddata 内存块中。传递给该函数的参数也
保存在该数据块中。
-- _beginthreadex 确实从内部调用了 CreateThread,因为这是操作系统了解如何创建线程
的唯一方法
-- 当调用 CreateThread 是,他被告知通过调用 _threadstartex 而不是 pfnStartAddr
来启动执行新线程。还有,传递给线程的参数是 tiddata 数据结构而不是 pvParam 的地址
-- 如果一切顺利,就会象 CreateThread 那样返回线程句柄,失败 返回 null
end
标准 c 运行期库远远早于线程问世,所以在多线程程序上运行的时候会有一些问题,比如 errno
一个线程设为 1 后正巧被中断,第二个线程这是把 errno 设为 3 ,当第一个线程恢复运行时检查errno 。。。就出问题了。 tiddata 数据结构和 _beginthreadex 就是为解决这个问题产生的。_endthread 则完成对应的清除工作。当然,关于这个问题还有很多内容,我手工输入太慢了。详细可以参考《windows 核心编程》----非常好的一本书
Begin__End
2001-08-31
打赏
举报
回复
pitchstar(lsy) 我现在看得还比较吃力的。
_beginthreadex推存使用的理由。
多谢关注。
pitchstar
2001-08-31
打赏
举报
回复
核心编程这本书上推荐用 _beginthreadex 建立一个线程,用 _endthreadex 退出线程
他们会处理一些 标准 c 库函数的上下文。
Begin__End
2001-08-31
打赏
举报
回复
emailcdh(大灰狼) 要是有这方面的书早看了。来这是没有办法才来的。
qing_zb(micro) 搜索了,都是一个个的问题。这个我不知道它们的来龙去脉的。
所以想找个完整的小程序看看。
多谢两位关注。
pitchstar
2001-08-31
打赏
举报
回复
一个很笨的多线程扫描程序,大家顺便帮忙看看怎么优化
从端口 1 开始 connect ,共起了
#include "winsock2.h"
#include "ws2tcpip.h"
#include "stdlib.h"
#include "stdio.h"
#include "windows.h"
int getport(u_short *);
unsigned long __stdcall scanport(void *);
static int threadcount=0;
int main(){
WSADATA wsd;
DWORD newthread;
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
::MessageBox(NULL,"socket 失败 ","sorry!",MB_OK);
}
for(int i=0;i<300;i++){
::CreateThread (NULL,0,scanport,NULL,0,&newthread);
threadcount++;
}
while(threadcount)::Sleep(100);
return 0;
}
unsigned long __stdcall scanport(void *){
u_short port;
SOCKET s;
struct sockaddr_in sin;
char portstr[7];
sin.sin_family =AF_INET;
sin.sin_addr.s_addr =inet_addr("192.168.0.1");
while(getport(&port)){
s = socket(AF_INET, SOCK_STREAM, 0);
// itoa(port,portstr,10);
// printf("\n\tport %d:",port);
sin.sin_port =htons(port);
if(!connect(s,(sockaddr *)&sin,sizeof(sin)))printf("\n\ta server is running on port:%d",port);
closesocket(s);
}
threadcount--;
return 0;
}
int getport(u_short * port){
static u_short currentport=1;
currentport++;
// printf("\nport %d",currentport);
if(currentport>65534)//65535
return 0;
else
(*port)=currentport;
return 1;
}
qing_zb
2001-08-31
打赏
举报
回复
多线程,搜索
emailcdh
2001-08-31
打赏
举报
回复
还是找本书吧,有详细的说明!
Begin__End
2001-08-31
打赏
举报
回复
方雨多谢你的up
wzaen
2001-08-31
打赏
举报
回复
up
Begin__End
2001-08-31
打赏
举报
回复
up
use_id
2001-08-31
打赏
举报
回复
找到一个,给你帖:
#include <afxmt.h>
//---------- g_var
UINT ThreadProc(LPVOID pParam);
CEvent g_eBusy;
BOOL CPicFileDlg::OnInitDialog()
{
CFileDialog::OnInitDialog();
// TODO: Add extra initialization here
SetTimer(1, 500, NULL);
g_eBusy.SetEvent();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
UINT ThreadProc(LPVOID pParam)
{
g_eBusy.ResetEvent();
CWnd hWnd;
hWnd.Attach((HWND)pParam);
ASSERT(hWnd);
CRect m_Rect;
CDC *m_pDC;
hWnd.GetClientRect(&m_Rect);
m_pDC=hWnd.GetDC();
PreViewPic(g_sFileName, m_pDC, m_Rect);
hWnd.Detach();
g_eBusy.SetEvent();
return 0;
}
void CPicFileDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CString sName=GetFileName(), sExt=GetFileExt();
if (sName=="" && sExt.CompareNoCase("bmp") && sExt.CompareNoCase("gif") && sExt.CompareNoCase("jpg"))
return;
if (g_sFileName.CompareNoCase(sName) && WaitForSingleObject(g_eBusy, 0)==WAIT_OBJECT_0)
{
g_sFileName=sName;
AfxBeginThread(ThreadProc,m_hPicView.GetSafeHwnd());
}
CFileDialog::OnTimer(nIDEvent);
}
void CPicFileDlg::OnDestroy()
{
// TODO: Add your message handler code here
KillTimer(1);
WaitForSingleObject(g_eBusy, INFINITE);
CFileDialog::OnDestroy();
}
Begin__End
2001-08-31
打赏
举报
回复
还没有人来了吗?
下载
多线程
编程技术开发资料 高清完整PDF版
多线程
编程技术开发资料.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
假如只有一个 CPU,单核,
多线程
还有用吗?
虽然在单核 CPU 上无法实现真正的并行计算,但
多线程
仍然可以提供一定程度的并发性和任务切换,从而改善应用程序的性能和响应性。在多核 CPU 环境中,
多线程
能够更好地发挥作用,实现真正的并行计算。因此,
多线程
编程在不同场景下仍然具有重要性。
多进程和
多线程
的区别是什么?多进程和
多线程
的优缺点分析
多进程和
多线程
的区别是什么?多进程和
多线程
的优缺点分析 多进程和
多线程
的区别是什么?此前小编给大家介绍了进程和线程的区别,那么大家知道多进程和
多线程
的区别又是什么吗?它们分别有什么优缺点?为了解决大家的疑惑,小编特地为大家整理了以下教程,希望对大家有所帮助。 前言: 多进程,Windows 应用程序中消息有两种送出途径;直接和排队。Windows或某些运行的...
在单核CPU下,有必要存在
多线程
吗?
我们使用一个例子来说明问题,在单核CPU的情况下,存在4个需要执行任务,有如下两种情况运行方式: 使用
多线程
执行这些任务,会发生线程上下文切换。 一个一个任务按顺序执行完成。 上述两种情况,到底那个执行效率会快呢? 分析:第一种情况明显发生很多次线程的上下文切换,我们知道线程的上下文切换是很消耗性能的,而第二种情况发生的则是一个任务完成再执行下一个任务,基本没线程切换,那么讲道理,难道是第二种情况下更加快了,那么就抛出个问题在单核CPU下,有必要存在
多线程
吗? 我们需要清楚的认识到:
多线程
..
python的
多线程
python
多线程
一、线程的概念 线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有
多线程
编程时,一个进程相当于一个主线程;当有
多线程
编程时,一个进程包含多个线程(含主线程)。使用线程可以实现程序大的开发。 多个线程可以在同一个程序中运行,并且每一个线程完成不同的任务。
多线程
实现后台服务程序可以同时处理多个任务,并不发生阻塞现象。
多线程
的程序设计的特点就是能够提高程序执行效率和处理速度。python程序可以同时并行运行多个相对独立的线
进程/线程/DLL
15,467
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章