IDE:VC6.0
#include <stdio.h>
#include <windows.h>DWORD WINAPI ThreadProc(LPVOID lpParam) {
for(int i = 0 ; i < 10 ; ++i)
printf("I am from a thread , count = %d\n" , i) ;
return 0 ;
}
int main(int argc , char *argv[]) {
DWORD dwThreadID ;
HANDLE hThread ;
hThread = ::CreateThread(NULL , NULL , ThreadProc , NULL , 0 , &dwThreadID) ;
printf("Now a thread start , id = %d\n" , dwThreadID) ;
::WaitForSingleObject(hThread , INFINITE) ;
return 0 ;
}上面这个创建线程的简单程序,运行时却是不确定的,printf("Now a thread start , id = %d\n" , dwThreadID) ;这个语句有时会执行两次,这时在VC下,我在cmd下执行编译完的程序时,每次都输出两句,创建的线程即使和主线程并发也不应该有两次输出啊,请解惑。
好久没来了,发个100分吧,
#include <stdio.h>
#include <windows.h>DWORD WINAPI ThreadProc(LPVOID lpParam) {
for(int i = 0 ; i < 10 ; ++i)
printf("I am from a thread , count = %d\n" , i) ;
return 0 ;
}
int main(int argc , char *argv[]) {
DWORD dwThreadID ;
HANDLE hThread ;
hThread = ::CreateThread(NULL , NULL , ThreadProc , NULL , 0 , &dwThreadID) ;
printf("Now a thread start , id = %d\n" , dwThreadID) ;
::WaitForSingleObject(hThread , INFINITE) ;
return 0 ;
}上面这个创建线程的简单程序,运行时却是不确定的,printf("Now a thread start , id = %d\n" , dwThreadID) ;这个语句有时会执行两次,这时在VC下,我在cmd下执行编译完的程序时,每次都输出两句,创建的线程即使和主线程并发也不应该有两次输出啊,请解惑。
好久没来了,发个100分吧,
解决方案 »
- ODBC技术的工程中加入ADO(急需要解答)
- 各位介绍一下,哪里有VC++2005的书卖呀?
- 为什么任务管理器中显示sqlserver占用的内存一直在变大
- 提个很菜的问题
- socket 的一个小问题,请大家帮忙指点... 急.
- 文件夹不能按右键删除,若是把其中的每一个文件都删除之后才可以删除,这是为什么呢???????
- ZHENG017() 请进!
- 想编一个类似AutoCAD,GridGen的绘图软件,应怎样编程?
- 正想开发一个支持Plug-ins功能的程序,那位能提供一点资料信息?
- 怎样用自己的程序代替windows cd player?
- 学串口通信或数据库编程是看类似的实例代码好还是看专业的串口通信或数据库编程教材好?
- 数据采集处理问题
因为CPU是分时间片执行各线程的.在不同的环境中,线程"抢占"时间片的情况名不相同.所以可能你的线程得到2次时间片的执行机会,而你的主线程才得到一次,所以就会出现你说的那种情况.
project->project setting->c/c++
category中选code generation, use run-time library中选debug multithread
#include <stdio.h>
#include <windows.h>
HANDLE mutex;
DWORD WINAPI ThreadProc(LPVOID lpParam);int main()
{ mutex=::CreateMutex(NULL,FALSE,NULL);
DWORD dwThreadID ;
HANDLE hThread ;
hThread = ::CreateThread(NULL , NULL , ThreadProc , NULL , 0 , &dwThreadID) ;
printf("Now a thread start , id = %d\n" , dwThreadID) ;
::WaitForSingleObject(hThread , INFINITE) ;
::WaitForSingleObject(mutex , INFINITE);
CloseHandle(hThread);
CloseHandle(mutex);
return 0 ;
}DWORD WINAPI ThreadProc(LPVOID lpParam)
{
::WaitForSingleObject(mutex,INFINITE);
for(int i = 0 ; i < 10 ; ++i)
printf("I am from a thread , count = %d\n" , i) ;
::ReleaseMutex(mutex);
return 0 ;
}
这个是库的问题