为什么我把函数头换成void就可以了,请问这是为什么?

#include <stdio.h>  
#include <windows.h> 
#include<conio.h>
CRITICAL_SECTION cs;
static int i;
DWORD WINAPI kbinput(LPVOID pM) //把函数头换成void 
{
int j=0;
for(j=0;j<20;j++){
EnterCriticalSection(&cs);
printf("%d\n",i);
i++;
LeaveCriticalSection(&cs);
}
}

DWORD WINAPI kbinput1(LPVOID pM)  
{
int j=0;
for(j=0;j<20;j++){
EnterCriticalSection(&cs);
printf("%d\n",i);
i++;
i++;
LeaveCriticalSection(&cs);
}
}

int main()
{
i=0;
InitializeCriticalSection(&cs);
HANDLE handle1 = CreateThread(NULL, 0, kbinput,NULL , 0, NULL);
HANDLE handle2 = CreateThread(NULL, 0, kbinput1,NULL, 0, NULL);
Sleep(1000);
}
上面是我写的一个程序,他的互斥锁不能正常运行,两个线程完全是乱来,但是我在创建线程是把CreateThread换成_beginthread,把函数头换成void就可以了,请问这是为什么?

梵蒂冈之花
浏览 86回答 1
1回答

GCT1015

控制台,还是叫终端比较好吧。帮你解决问题,首先就是父子进程通信问题,可以用文件,管道,或者socket等等,注意自己要写互斥,或加锁。然后就是关掉进程的标准输出了。代码还是要你自己写才会有进步哈~
打开App,查看更多内容
随时随地看视频慕课网APP