您的位置:首页 > 编程语言 > C语言/C++

VC C++ 线程同步的方法

2015-10-27 20:17 232 查看
1. CriticalSection

2. Event     CreateEvent

3. 互斥对象  CreateMutex   互斥对象还可以实现进程间的同步。实现一个进程的运行。   GetLastError() = Error_Already_Exists .....

进程间的同步

1.   邮件槽 CreateMailSlot 

   优缺点:

            1. 发送的是数据报,使用的是UDP协议不可靠连接。

           2. 使能单向传送数据,只能从客户端到服务器端,客户端写,服务器端读。 

           3. 不能超过400KB数据

            4. 可以一个客户端到多个服务器发送。

 

    命名管道

    createNamePipe   connectNamePipe

    优缺点

      1. 发送的数据流,使用的TCP协议,可靠连接。

      2. 双向发送数据,能读能写。

      3. 数据没有限制

     

    匿名管道       只能被用在父进程与子进程之间进行数据通信。与命名管道相比,匿名管道不能被使用在网络进程之间。

子进程.exe

int _tmain(int argc, _TCHAR* argv[])

{
HANDLE read = NULL;
char text[100] = {0};
DWORD readtext;
read = GetStdHandle(STD_INPUT_HANDLE);

if (ReadFile(read, text,100,&readtext,NULL))
{
printf("从匿名管道中读取的数据是%s\r\n",text);
}

return 0;

}

int _tmain(int argc, _TCHAR* argv[])

{
HANDLE read = NULL, write = NULL;
SECURITY_ATTRIBUTES ss;
STARTUPINFO sa = {0};
PROCESS_INFORMATION pp = {0};
char text[] = "匿名管道程序测试!";
DWORD writetext;
ss.nLength = sizeof ss;
ss.lpSecurityDescriptor = NULL;
ss.bInheritHandle =TRUE;

if (CreatePipe(&read,&write, &ss,0))
{
cout << "创建匿名管道成功\r\n" <<endl;
sa.cb = sizeof(sa);
sa.dwFlags = STARTF_USESHOWWINDOW;
sa.hStdInput  = read;
sa.hStdOutput = write;
sa.hStdError = GetStdHandle(STD_ERROR_HANDLE);
if (::CreateProcess(NULL,_T("紫禁城.exe"),NULL,NULL,TRUE,0, NULL,NULL, &sa,&pp))
{
printf("创建紫禁城成功\r\n");
WriteFile(write,text,sizeof(text),&writetext,NULL);
printf("通过匿名管道写入数据成功\r\n");
}

}

return 0;

}

                                       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: