admin管理员组文章数量:1530516
//c++ builder TThread类有临界区,但是要写个类不爽。
//直接使用windows CRITICAL_SECTION 就便捷些。
//本文在c++ builder 10.3 64/32位,6.0调试通过。
#if(__BORLANDC__<=1380) // 低版本
#include <vcl.h>
#endif
#include <stdio.h>
#include <windows.h>
const unsigned int THREAD_NUM = 50;
unsigned int g_Count = 0;
CRITICAL_SECTION cs; //声明关键段
DWORD WINAPI ThreadFunc(LPVOID);
#if(__BORLANDC__<=1380) // 低版本
int main(int argc, char* argv[])
#else //高版本
int _tmain(int argc, _TCHAR* argv[])
#endif
{
InitializeCriticalSection(&cs); // 初始化关键段
HANDLE hThread[THREAD_NUM];
//int start=::GetTickCount();
for (int i = 0; i < THREAD_NUM; i++)
{
hThread[i] = CreateThread(NULL, 0, ThreadFunc, 0, 0, NULL); // 创建线程
}
//int end1=::GetTickCount();
//printf("耗时%d\n",end1-start);
WaitForMultipleObjects(THREAD_NUM, hThread, true, INFINITE); //一直等待,直到所有子线程全部返回
//int end2=::GetTickCount();
//printf(" 总共 %d 个线程给 g_Count 的值加一,现在 g_Count = %d\n", THREAD_NUM, g_Count);
//printf("耗时%d\n",end2-end1);
DeleteCriticalSection(&cs); //销毁关键段
system("pause");
return 0;
}
DWORD WINAPI ThreadFunc(LPVOID p)
{
//Sleep(50);
EnterCriticalSection(&cs); // 进入关键段
printf("%d\n",g_Count);
g_Count++;
LeaveCriticalSection(&cs); // 离开关键段
//Sleep(50);
return 0;
}
本文标签: 临界WindowsCRITICALSECTION
版权声明:本文标题:c++ builder6 使用windows 临界区(CRITICAL_SECTION ) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1726269691a1063666.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论