这是我的原代码,好象线程没有启动:
#include "stdio.h"
#include "windows.h"const int MAX_TIMES=1000;
int g_nIndex = 0;
DWORD g_dwTimes[MAX_TIMES];DWORD WINAPI FirstThread(){
while(g_nIndex<MAX_TIMES){
g_dwTimes[g_nIndex]=GetTickCount();
g_nIndex++;
}
return(0);
}DWORD WINAPI SecondThread(){
while(g_nIndex<MAX_TIMES){
g_nIndex++;
g_dwTimes[g_nIndex - 1]=GetTickCount();
}
return(0);
}
int main(int argc, char *argv[]){
HANDLE hThread;
LPDWORD pdwThreadId=new (DWORD);
hThread=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)FirstThread,NULL,NULL,pdwThreadId);
if(!hThread)
printf("Fail to Create FirstThread!/n"); if(!CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)SecondThread,NULL,NULL,NULL))
printf("Fail to Create FirstThread!/n"); printf("g_nIndex =%d",g_nIndex);
}
#include "stdio.h"
#include "windows.h"const int MAX_TIMES=1000;
int g_nIndex = 0;
DWORD g_dwTimes[MAX_TIMES];DWORD WINAPI FirstThread(){
while(g_nIndex<MAX_TIMES){
g_dwTimes[g_nIndex]=GetTickCount();
g_nIndex++;
}
return(0);
}DWORD WINAPI SecondThread(){
while(g_nIndex<MAX_TIMES){
g_nIndex++;
g_dwTimes[g_nIndex - 1]=GetTickCount();
}
return(0);
}
int main(int argc, char *argv[]){
HANDLE hThread;
LPDWORD pdwThreadId=new (DWORD);
hThread=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)FirstThread,NULL,NULL,pdwThreadId);
if(!hThread)
printf("Fail to Create FirstThread!/n"); if(!CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)SecondThread,NULL,NULL,NULL))
printf("Fail to Create FirstThread!/n"); printf("g_nIndex =%d",g_nIndex);
}
解决方案 »
- 装了双系统,编译的程序带了安全证书,如何去掉
- 关于CTreeCtrl的选中问题?
- BHO插件maxthon/myie/腾汛TT这些浏览器能够自动加载吗?
- invalidaterect()如何使用啊,能否给个例子啊
- 哈哈哈啊,我操啊,操啊,使劲操啊,操啊,操啊,使劲操啊!进来一起操啊!!!!
- linux下的web服务器
- truetype 字体的问题,问题虽小,可也有100分送呀!
- 如何再局域网聊天室加上文件传输功能!
- 我記得前幾年網上有個 Win2000 源碼下載的。現在哪裡還有?我想看看
- mfc对话框webbrowser 控件编程,如何定制User-Agent信息?
- 怎么用ado直接读取vfp数据库,而不用建数据源???
- 加密狗,关于程序调用win32dll的菜鸟问题,在线等!
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
);
(即使你不需要使用这个函数),否则你强制转换了,编译虽然通过了,执行线程函数时会
有问题的。程序应该这样写:DWORD WINAPI FirstThread(void*)
{
while(g_nIndex<MAX_TIMES) {
g_dwTimes[g_nIndex] = GetTickCount();
g_nIndex++;
}
return 0;
}DWORD WINAPI SecondThread()
{
while(g_nIndex<MAX_TIMES) {
g_nIndex++;
g_dwTimes[g_nIndex - 1]=GetTickCount();
}
return 0;
}
int main(int argc, char *argv[])
{
DWORD dwThreadId;
HANDLE hThread[2];
hThread[0] = CreateThread(NULL,NULL, FirstThread,
NULL, 0, &dwThreadId);
if (!hThread[0])
printf("Fail to Create FirstThread!/n"); hThread[1] = CreateThread(NULL,NULL, SecondThread,
NULL, 0, &dwThreadId);
if (!hThread[1])
printf("Fail to Create FirstThread!/n"); WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
for(int n=0; n<2; n++) CloseHandle(hThread[n]); printf("g_nIndex =%d",g_nIndex);
}
DWORD WINAPI SecondThread(void*)
{
//...... 这儿省略
}
不然的话可能会编译错误,如果对了,也是强制转换的,线程执行可能会出现问题的。
while(g_nIndex<MAX_TIMES){
g_dwTimes[g_nIndex]=GetTickCount();
g_nIndex++;
g_nIndex++;
g_dwTimes[g_nIndex - 1]=GetTickCount();
}
注意循环中的4行代码执行顺序将是任意的,结果成了随机的,这是不是你想要的呢?