您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ CreateThread函数代码示例

51自学网 2021-06-01 20:15:16
  C++
这篇教程C++ CreateThread函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中CreateThread函数的典型用法代码示例。如果您正苦于以下问题:C++ CreateThread函数的具体用法?C++ CreateThread怎么用?C++ CreateThread使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了CreateThread函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: defined

//.........这里部分代码省略.........                    processIDS.push_back(pid);  //create map from line number to pid so you can append files in correct order later                    process++;                }else if (pid == 0){                    EstOutput myresults;                    myresults = driver(t, namesOfGroupCombos, lines[process].start, lines[process].num, ct);                                        if (m->control_pressed) { exit(0); }                                        //pass numSeqs to parent                    ofstream out;                    string tempFile = outputDir + m->mothurGetpid(process) + ".unweighted.results.temp";                    m->openOutputFile(tempFile, out);                    out << myresults.size() << endl;                    for (int i = 0; i < myresults.size(); i++) {  out << myresults[i] << '/t';  } out << endl;                    out.close();                                        exit(0);                }else {                     m->mothurOut("[ERROR]: unable to spawn the necessary processes."); m->mothurOutEndLine();                     for (int i = 0; i < processIDS.size(); i++) { kill (processIDS[i], SIGINT); }                    exit(0);                 }            }        }        		results = driver(t, namesOfGroupCombos, lines[0].start, lines[0].num, ct);				//force parent to wait until all the processes are done		for (int i=0;i<(processors-1);i++) { 			int temp = processIDS[i];			wait(&temp);		}				if (m->control_pressed) { return results; }				//get data created by processes		for (int i=0;i<(processors-1);i++) { 			ifstream in;			string s = outputDir + toString(processIDS[i]) + ".unweighted.results.temp";			m->openInputFile(s, in);						//get quantiles			if (!in.eof()) {				int num;				in >> num; m->gobble(in);								if (m->control_pressed) { break; }								double w; 				for (int j = 0; j < num; j++) {					in >> w;					results.push_back(w);				}				m->gobble(in);			}			in.close();			m->mothurRemove(s);		}#else		//fill in functions        vector<unweightedData*> pDataArray;		DWORD   dwThreadIdArray[processors-1];		HANDLE  hThreadArray[processors-1];        vector<CountTable*> cts;        vector<Tree*> trees;				//Create processor worker threads.		for( int i=1; i<processors; i++ ){            CountTable* copyCount = new CountTable();            copyCount->copy(ct);            Tree* copyTree = new Tree(copyCount);            copyTree->getCopy(t);                        cts.push_back(copyCount);            trees.push_back(copyTree);                        unweightedData* tempweighted = new unweightedData(m, lines[i].start, lines[i].num, namesOfGroupCombos, copyTree, copyCount, includeRoot);			pDataArray.push_back(tempweighted);			processIDS.push_back(i);            			hThreadArray[i-1] = CreateThread(NULL, 0, MyUnWeightedThreadFunction, pDataArray[i-1], 0, &dwThreadIdArray[i-1]);		}				results = driver(t, namesOfGroupCombos, lines[0].start, lines[0].num, ct);				//Wait until all threads have terminated.		WaitForMultipleObjects(processors-1, hThreadArray, TRUE, INFINITE);				//Close all thread handles and free memory allocations.		for(int i=0; i < pDataArray.size(); i++){            for (int j = 0; j < pDataArray[i]->results.size(); j++) {  results.push_back(pDataArray[i]->results[j]);  }			delete cts[i];            delete trees[i];			CloseHandle(hThreadArray[i]);			delete pDataArray[i];		}#endif	        return results;	}
开发者ID:Cryomics-Lab,项目名称:mothur,代码行数:101,


示例2: CPath

//.........这里部分代码省略.........		env.AddTail(_T("PATH_INFO=") + redir);		env.AddTail(_T("PATH_TRANSLATED=") + path);		env.AddTail(_T("SCRIPT_NAME=") + redir);		env.AddTail(_T("QUERY_STRING=") + pClient->m_query);		if(pClient->m_hdrlines.Lookup(_T("content-type"), str))			env.AddTail(_T("CONTENT_TYPE=") + str);		if(pClient->m_hdrlines.Lookup(_T("content-length"), str))			env.AddTail(_T("CONTENT_LENGTH=") + str);		POSITION pos = pClient->m_hdrlines.GetStartPosition();		while(pos)		{			CString key = pClient->m_hdrlines.GetKeyAt(pos);			CString value = pClient->m_hdrlines.GetNextValue(pos);			key.Replace(_T("-"), _T("_"));			key.MakeUpper();			env.AddTail(_T("HTTP_") + key + _T("=") + value);		}				CString name;		UINT port;		if(pClient->GetPeerName(name, port))		{			str.Format(_T("%d"), port);			env.AddTail(_T("REMOTE_ADDR=")+name);			env.AddTail(_T("REMOTE_HOST=")+name);			env.AddTail(_T("REMOTE_PORT=")+str);		}		if(pClient->GetSockName(name, port))		{			str.Format(_T("%d"), port);			env.AddTail(_T("SERVER_NAME=")+name);			env.AddTail(_T("SERVER_PORT=")+str);		}		env.AddTail(_T("/0"));		str = Implode(env, '/0');		envstr = CStringA(str, str.GetLength());		FreeEnvironmentStrings((LPTSTR)lpvEnv);	}	TCHAR* cmdln = new TCHAR[32768];	_sntprintf(cmdln, 32768, _T("/"%s/" /"%s/""), cgi, path);	if(hChildStdinRd && hChildStdoutWr)	if(CreateProcess(		NULL, cmdln, NULL, NULL, TRUE, 0, 		envstr.GetLength() ? (LPVOID)(LPCSTR)envstr : NULL, 		dir, &siStartInfo, &piProcInfo))	{		DWORD ThreadId;		CreateThread(NULL, 0, KillCGI, (LPVOID)piProcInfo.hProcess, 0, &ThreadId);		static const int BUFFSIZE = 1024;		DWORD dwRead, dwWritten = 0;		int i = 0, len = pClient->m_data.GetLength();		for(; i < len; i += dwWritten)			if(!WriteFile(hChildStdinWrDup, (LPCSTR)pClient->m_data + i, min(len - i, BUFFSIZE), &dwWritten, NULL)) 				break;		CloseHandle(hChildStdinWrDup);		CloseHandle(hChildStdoutWr);		body.Empty();		CStringA buff;		while(i == len && ReadFile(hChildStdoutRdDup, buff.GetBuffer(BUFFSIZE), BUFFSIZE, &dwRead, NULL) && dwRead)		{			buff.ReleaseBufferSetLength(dwRead);			body += buff;		}		int hdrend = body.Find("/r/n/r/n");		if(hdrend >= 0)		{			hdr = body.Left(hdrend+2);			body = body.Mid(hdrend+4);		}		CloseHandle(hChildStdinRd);		CloseHandle(hChildStdoutRdDup);		CloseHandle(piProcInfo.hProcess);		CloseHandle(piProcInfo.hThread);	}	else	{		body = _T("CGI Error");	}	delete [] cmdln;	return true;}
开发者ID:JERUKA9,项目名称:xy-VSFilter,代码行数:101,


示例3: main

//.........这里部分代码省略.........        }                reply=(char *)malloc(replySize);        ZeroMemory(data, sizeof(data));        params[0]=PARAM;        params[1]=(unsigned long)GetProcAddress(iphlpapi, "IcmpSendEcho2Ex");                RaiseException(EXCEPTION_BREAKPOINT, 0, 2, params);        puts("Exception raised!");        IcmpSendEcho(hIcmpFile, ipaddr, data, sizeof(data), NULL, reply, replySize, 1000);        puts("This line should never be shown...");        IcmpCloseHandle(hIcmpFile);        return 0;    }        PROCESS_INFORMATION pi;    STARTUPINFO si;    HANDLE hProcess, hThread;    DEBUG_EVENT debugEvent;    EXCEPTION_RECORD *ExceptionRecord=&debugEvent.u.Exception.ExceptionRecord;    CONTEXT context;    FARPROC IcmpSendEcho2Ex=NULL;    char path[256], args[512], originalByte[1];        ZeroMemory(π, sizeof(PROCESS_INFORMATION));    ZeroMemory(&si, sizeof(STARTUPINFO));    ZeroMemory(&debugEvent, sizeof(DEBUG_EVENT));    ZeroMemory(&context, sizeof(CONTEXT));    ZeroMemory(path, sizeof(path));    ZeroMemory(args, sizeof(args));    si.cb=sizeof(STARTUPINFO);    si.dwFlags=STARTF_USESHOWWINDOW;    si.wShowWindow=SW_HIDE;    context.ContextFlags=CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;        GetModuleFileName(NULL, path, sizeof(path)-1);    snprintf(args, sizeof(args)-1, "%s %s", path, argv[1]);        if( !CreateProcess(        NULL,        args,        NULL,        NULL,        FALSE,        DEBUG_PROCESS,        NULL,        NULL,        &si,        π    )){       perror("CreateProcess");       return 1;    }        if( (hProcess=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pi.dwProcessId))==NULL){       perror("OpenProcess");       return 1;    }        HANDLE kernel32=LoadLibrary("kernel32.dll");    FARPROC DebugSetProcessKillOnExit=GetProcAddress(kernel32, "DebugSetProcessKillOnExit");    FARPROC DebugActiveProcessStop=GetProcAddress(kernel32, "DebugActiveProcessStop");    FARPROC OpenThread=GetProcAddress(kernel32, "OpenThread");    CloseHandle(kernel32);    DebugSetProcessKillOnExit(TRUE);        while(WaitForDebugEvent(&debugEvent, INFINITE) && debugEvent.dwDebugEventCode!=EXIT_PROCESS_DEBUG_EVENT){             if( debugEvent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT && ExceptionRecord->ExceptionCode==EXCEPTION_BREAKPOINT){                 if( ExceptionRecord->NumberParameters>1 && ExceptionRecord->ExceptionInformation[0]==PARAM){                     IcmpSendEcho2Ex=(FARPROC)ExceptionRecord->ExceptionInformation[1];                     printf("IcmpSendEcho2Ex %p/n", IcmpSendEcho2Ex);                     if( !BreakpointSet(hProcess, IcmpSendEcho2Ex, &originalByte)){                         perror("BreakpointSet");                         break;                     }                 }                 else if( ExceptionRecord->ExceptionAddress==IcmpSendEcho2Ex){                      printf("EIP %p/n", IcmpSendEcho2Ex);                      if( !BreakpointRetrieve(hProcess, IcmpSendEcho2Ex, &originalByte)){                          perror("BreakpointRetrieve");                          break;                      }                      if((hThread=(HANDLE)OpenThread(THREAD_ALL_ACCESS, FALSE, debugEvent.dwThreadId))==NULL) puts("OpenThread");                      if(!GetThreadContext(hThread, &context)) puts("GetThreadContext");                      context.Eip -= 1;                      if(!SetThreadContext(hThread, &context)) puts("SetThreadContext");                      CreateThread(NULL, 0, (void *)Terminate, hProcess, 0, NULL);                 }             }             else if( debugEvent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT){                  puts("Exception!");                  DebugActiveProcessStop(debugEvent.dwProcessId);                  break;             }             ContinueDebugEvent(debugEvent.dwProcessId, debugEvent.dwThreadId, DBG_CONTINUE);             ZeroMemory(&debugEvent, sizeof(DEBUG_EVENT));    }        return 0;}
开发者ID:B-Rich,项目名称:osf_db,代码行数:101,


示例4: CreateThread

bool Thread::start(classID (threadFunction)(classID), classID parameter){    //kill the previous thread    this->kill();    //test if the function is true    if(threadFunction){        //WINDOWS 32#ifdef WIN32        DWORD flag;        this->threadID = CreateThread(NULL, //                                      (DWORD)NULL,        //                                      edkThreadFunc,     // fun
C++ CreateToolhelp32Snapshot函数代码示例
C++ CreateTexture函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。