进程同步用来实现程序并发执行时候的可再现性。
一.进程同步及异步的概念
1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。
2.异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
在windows的调用中:
system("notepad"); //同步
ShellExecuteA(0, "open", "notepad", 0, 0, 1);
} 异步
#include
#include
#include
using namespace std;
void openQQ()
{
ShellExecuteA(0, "open", "D:\\qq\\Bin\\qq.exe", 0, 0, 1);
}
void diagonal(HWND win,int i)
{
if(i==900){
return ;
}else{
//i+=10;
SetWindowPos(win,NULL,i,i*5/9,300,400,1);
Sleep(30);
diagonal(win,i+10);
}
}
void moveQQ()
{
HWND win;
win = FindWindowA("TXGuiFoundation", "QQ");
if (win == NULL) {
cout << "not found" << endl;
}
else {
cout << "get it" << endl;
// while (1) {
// ShowWindow(win, SW_HIDE);
// Sleep(2000);
// ShowWindow(win, SW_SHOW);
// Sleep(2000);
// }
for(int i=0;i<=900;i+=10){
SetWindowPos(win,NULL,i,0,300,400,1);
Sleep(30);
}
{
int i=0;
while(i<=500){
i+= 10;
SetWindowPos(win,NULL,900,i,200,400,1);
Sleep(30);
}
}
{
int i = 900;
do{
Sleep(30);
i -= 10;
SetWindowPos(win,NULL,i,500,300,400,1);
}while(i);
}
{
int i =500;
AA:if(i){
i-=10;
SetWindowPos(win,NULL,0,i,300,400,1);
Sleep(30);
goto AA;
}
}
{
diagonal(win,0);
}
}
}
int main()
{
//while (1) {
// //system("D:\\qq\\Bin\\qq.exe"); //同步
// ShellExecuteA(0, "open", "notepad", 0, 0, 1); //异步
// ShellExecuteA(0, "open", "D:\\qq\\Bin\\qq.exe", 0, 0, 1);
// Sleep(1000);
//}
openQQ();
Sleep(5000);
//system("D:\\qq\\Bin\\qq.exe");
moveQQ();
int x;
cin>>x;
return 0;
}