vc多线程vc如何多线程编程

vc多线程  时间:2021-08-18  阅读:()

vc多线程修改同一个全局变量,如何加锁

CRITICAL_SECTION cs; // 全局变量 ::InitializeCriticalSection( & cs); // 初始化锁 ::EnterCriticalSection( & cs); 获得锁 ...... ::LeaveCriticalSection( & cs); // 释放锁 ...... ::DeleteCriticalSection( & cs); // 删除锁 ------解决方案--------------------------------------------------------探讨引用:C/C++ codeCRITICAL_SECTION cs; // 全局变量

如何在windows系统上用c++创建多线程

//?TS2.cpp?:?Defines?the?entry?point?for?the?console?application. // #include?"stdafx.h" #include? #include? #include? void?gotoxy(int?a,?int?b) { ????cout<<"gotoxy関数実行成功!!!"<VC中怎么用多线程画图,不显示画图过程啊,我是新手如果用DC的话,也就是设备内容(CreateCompatibleDC),多线程绘制意义不大。

因为DC的缘故,线程必须要做同步,所以最终的效率不会有多大提升,也就是多一个系统调度时间片而已。

因此, 1、如果在CreateCompatibleDC的情况下必须使用多线程的话,那就是要用系统临界区对全局DC(绘图设备内容)做原子访问限制。

具体可以搜索一下“系统临界区”。

2、如果不一定用何种绘图手段,需要多线程来大幅度提升效率的话,我推荐采用定义全局画布缓冲区,然后对每一个绘图线程分配其各自的Rect,用以绘制,最后用DirectDraw或Direct3D将缓冲区复制到显卡即可。

这样效率是最高的。

例如: unsigned char g_ucGraphMemory[1024*768*4]; //全局画布缓冲区,1024x768大小,32位色(A8R8G8B8) typedef struct { unsigned char *ptrOffset; unsigned long dwLength; } DrawRect; // 每个线程需要画的区域 int main() { /* 将整个画布(g_ucGraphMemory)分割成4块区域 */ DrawRect mRect[4]; mRect[0].ptrOffset = g_ucGraphMemory; mRect[1].ptrOffset = g_ucGraphMemory + (1024 * 768); mRect[2].ptrOffset = g_ucGraphMemory + ((1024 * 768) * 2); mRect[3].ptrOffset = g_ucGraphMemory + ((1024 * 768) * 3); mRect[0].dwLength = 1024 * 768; mRect[1].dwLength = 1024 * 768; mRect[2].dwLength = 1024 * 768; mRect[3].dwLength = 1024 * 768; /***********************************************/ CreateThread(..., Thread1, &mRect[0]); // 创建绘图线程1 CreateThread(..., Thread2, &mRect[1]); // 创建绘图线程2 CreateThread(..., Thread3, &mRect[2]); // 创建绘图线程3 CreateThread(..., Thread4, &mRect[3]); // 创建绘图线程4 ...... WaitForSingleObject(); // 等待线程绘图完毕 Direct3DCreate9(); // 创建D3D设备 .... CreateTexture(); // 创建纹理 .... CreateVertexBuffer(); // 创建顶点缓冲区 .... LockRect(); // 锁定纹理区域 memcpy(); // 把g_ucGraphMemory复制到D3D纹理缓冲区内 .... DrawPrimitive(); // 把纹理贴到多边形上 .... Present(); // 显卡绘图 .... } // 绘图线程1 DWORD WINAPI Thread1(DrawRect *ptrRect) { ptrRect->ptrOffset; // 这个便是此线程需要绘制的区域始地址 ptrRect->dwLength ; // 这个是此线程需要绘制的区域大小 ..... // 这里可以使用像素填充法、向量、GDI复制到内存区等手段进行绘制 ..... // 通知主线程绘图完毕 } // 绘图线程2 DWORD WINAPI Thread2(DrawRect *ptrRect) { .... } // 绘图线程3 DWORD WINAPI Thread3(DrawRect *ptrRect) { .... } // 绘图线程4 DWORD WINAPI Thread4(DrawRect *ptrRect) { .... } 以上只是一个多线程分块内存缓冲区绘图的流程例子,实际代码要多一些。

此处主要表达分块的思想和主线程等待分线程绘图并进行显示的流程。

其中分块过程是为了简单,所以采用数组直接分段。

实际中需要按照应用场合进行调整,如按行像素分块、按列像素分块、按矩形像素分块等。

vc如何多线程编程

在VC中可以调用MFC函数AfxBeginThread,创建线程。

线程做什么,怎么做就得看你自己的设计了。

贴一段MSDN里的代码: Visual C++ Copy Code class CSockThread : public CWinThread { public: SOCKET m_hConnected; protected: CChatSocket m_sConnected; // remainder of class declaration omitted. Visual C++ Copy Code BOOL CSockThread::InitInstance() { // Attach the socket object to the socket handle // in the context of this thread. m_sConnected.Attach(m_hConnected); m_hConnected = NULL; return TRUE; } Visual C++ Copy Code // This listening socket has been constructed // in the primary thread. void CListeningSocket::ept(int nErrorCode) { UNREFERENCED_PARAMETER(nErrorCode); // This CSocket object is used just temporarily // to ept the ing connection. CSocket sConnected; ept(sConnected); // Start the other thread. CSockThread* pSockThread = (CSockThread*)AfxBeginThread( RUNTIME_CLASS(CSockThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); if (NULL != pSockThread) { // Detach the newly epted socket and save // the SOCKET handle in our new thread object. // After detaching it, it should no longer be // used in the context of this thread. pSockThread->m_hConnected = sConnected.Detach(); pSockThread->ResumeThread(); } }

CheapWindowsVPS$4.5/月,美国VPS/免费Windows系统/1Gbps不限流量/,可选美洲、欧洲、亚洲等8大机房

国外商家提供Windows系统的并不常见,CheapWindowsVPS 此次提供的 2 款 VPS 促销套餐,提供 5 折永久优惠码,优惠后月付 4.5 美元起,价格还是挺诱人的,VPS 不限流量,接入 1Gbps 带宽,8 个机房皆可选,其中洛杉矶机房还提供亚洲优化网络供选择,操作系统有 Windows 10 专业版、2012 R2、2016、Linux等。Cheap Windows VPS是...

Virmach 3.23美元可用6个月的VPS主机

Virmach 商家算是比较久且一直在低价便宜VPS方案中玩的不亦乐乎的商家,有很多同时期的商家纷纷关闭转让,也有的转型到中高端用户。而前一段时间也有分享过一次Virmach商家推出所谓的一次性便宜VPS主机,比如很低的价格半年时间,时间到服务器也就关闭。这不今天又看到商家有提供这样的产品。这次的活动产品包括圣何塞和水牛城两个机房,为期六个月,一次性付费用完将会取消,就这么特别的产品,适合短期玩玩...

tmhhost(100元/季)自带windows系统,香港(三网)cn2 gia、日本cn2、韩国cn2、美国(三网)cn2 gia、美国cn2gia200G高防

tmhhost可谓是相当熟悉国内网络情况(资质方面:ISP\ICP\工商齐备),专业售卖海外高端优质线路的云服务器和独立服务器,包括了:香港的三网cn2 gia、日本 cn2、日本软银云服务器、韩国CN2、美国三网cn2 gia 云服务器、美国 cn2 gia +200G高防的。另外还有国内云服务器:镇江BGP 大连BGP数据盘和系统盘分开,自带windows系统,支持支付宝付款和微信,简直就是专...

vc多线程为你推荐
百度云论坛哪里需要资源网盘分流?论坛、网站介绍一个……安全防护安全防护用品都有哪些provisionedNIST的云计算定义安卓模拟器哪个好用PC平台的安卓模拟器哪个最好用运行时错误1004excel 打开表格提示 运行是错误1004,本人不会用宏和VB,只是表格内数据显示不出来wizardry哈利波特里的蛇院,狮院,獾院,鹰院. 分别指什么充值卡充值支付宝可以用充值卡充值吗?邮件服务器软件Windows邮件服务器软件那个好好用的手机杀毒软件好用的手机杀毒软件协亨协亨,话机世界,迪信通哪个买手机更便宜?
web服务器架设软件 免费ftp站点 上海域名 北京双线 adroit 服务器是干什么的 idc查询 服务器监测 paypal注册教程 免费mysql数据库 个人免费邮箱 酸酸乳 .htaccess 免费的加速器 globalsign 标准机柜 nic 日本小学生 紫田网络 kosspp 更多