初学线程,谁给一个运行简单线程的例子,最好有注释,3Q rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #include <windows.h>#include <iostream.h>DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data);DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data);int index=0;int tickets=100;HANDLE hMutex;void main(){ HANDLE hThread1; HANDLE hThread2; hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); /*while(index++<1000) cout<<"main thread is running"<<endl;*/ //hMutex=CreateMutex(NULL,TRUE,NULL); hMutex=CreateMutex(NULL,TRUE,"tickets"); if(hMutex) { if(ERROR_ALREADY_EXISTS==GetLastError()) { cout<<"only instance can run!"<<endl; return; } } WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex); ReleaseMutex(hMutex); Sleep(4000);// Sleep(10);}DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data){ /*while(index++<1000) cout<<"thread1 is running"<<endl;*/ /*while(TRUE) { //ReleaseMutex(hMutex); WaitForSingleObject(hMutex,INFINITE); if(tickets>0) { Sleep(1); cout<<"thread1 sell ticket : "<<tickets--<<endl; } else break; ReleaseMutex(hMutex); }*/ WaitForSingleObject(hMutex,INFINITE); cout<<"thread1 is running"<<endl; return 0;}DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data){ /*while(TRUE) { //ReleaseMutex(hMutex); WaitForSingleObject(hMutex,INFINITE); if(tickets>0) { Sleep(1); cout<<"thread2 sell ticket : "<<tickets--<<endl; } else break; ReleaseMutex(hMutex); }*/ WaitForSingleObject(hMutex,INFINITE); cout<<"thread2 is running"<<endl; return 0;} CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);为什么这样写不应该是这样吗?CreateThread(Fun2Proc,0,NULL,NULL,0,NULL);第一个参数不应该是函数名称吗? 而CreateThread()这个函数不是5个参数吗? 一个简单的例子~~===== MainFrm.h=====...private: HANDLE threadhandle;...===== MainFrm.cpp =====... CMyThread::m_bRunning = true; // run the thread DWORD threadid; threadhandle = CreateThread(NULL, 0, CMyThread::ThreadProc, this, 0, &threadid);... CMyThread::m_bRunning = false; // stop the thread WaitForSingleObject(threadhandle, 20000); // timeout = 20s...===== MyThread.cpp =====...bool CMyThread::m_bRunning = false;// CMyThreadunsigned long WINAPI CMyThread::ThreadProc(void* p){ while (m_bRunning) { // do some loop } return 0;} mfc ofstream问题 C# 添加控件后,弹出对话框“建立空文档失败” 欢迎大家提供文章信息! 请问哪里有c或c++的开源项目? 对象指针释放问题 ActiveX控件与普通控件的问题! 怎么把超过256种色素的bmp文件放到工具栏中? 已知一个线程的句柄,如何得到该线程的指针? ATL中 如何让父控件响应子控件的消息 升到星星要多少专家分啊??? 怎么对程序进行打包?100分奉送!
#include <iostream.h>DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int index=0;
int tickets=100;
HANDLE hMutex;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
/*while(index++<1000)
cout<<"main thread is running"<<endl;*/
//hMutex=CreateMutex(NULL,TRUE,NULL);
hMutex=CreateMutex(NULL,TRUE,"tickets");
if(hMutex)
{
if(ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only instance can run!"<<endl;
return;
}
}
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
Sleep(4000);
// Sleep(10);
}DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
/*while(index++<1000)
cout<<"thread1 is running"<<endl;*/
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}*/ WaitForSingleObject(hMutex,INFINITE);
cout<<"thread1 is running"<<endl;
return 0;
}DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}*/
WaitForSingleObject(hMutex,INFINITE);
cout<<"thread2 is running"<<endl;
return 0;
}
为什么这样写不应该是这样吗?
CreateThread(Fun2Proc,0,NULL,NULL,0,NULL);
第一个参数不应该是函数名称吗?
...
private:
HANDLE threadhandle;
...
===== MainFrm.cpp =====
...
CMyThread::m_bRunning = true; // run the thread
DWORD threadid;
threadhandle = CreateThread(NULL, 0, CMyThread::ThreadProc, this, 0, &threadid);
...
CMyThread::m_bRunning = false; // stop the thread
WaitForSingleObject(threadhandle, 20000); // timeout = 20s
...
===== MyThread.cpp =====
...
bool CMyThread::m_bRunning = false;// CMyThread
unsigned long WINAPI CMyThread::ThreadProc(void* p)
{
while (m_bRunning)
{
// do some loop
}
return 0;
}