3 초 동안 스레드에 "1"을 써야하는 프로그램을 작성했습니다. 그러나 컨트롤 출력을 디버깅하거나 추가하려고하면 스레드가 종종 생성되지 않는다는 것을 알게됩니다 (콘솔 또는 디버그 지점의 업적 없음). 반환 값 CreateThread()
을 확인하면 괜찮습니다. I/O 용 파일에 대한 로그를 읽었지만 필요 없다고 생각합니다. 두 개의 스레드가있는 프로그램이 필요합니다. 하나는 3 초 동안 "1"을 쓰고, 두 번째 것은 3 초 동안 "2"를 쓰는 것입니다. 그런 다음 결과를 비교하십시오. 입력 파일에 "1"과 "2"가 섞여 있으면 문제가되지 않습니다.스레드로 파일에 쓰십시오, C++
#include <iostream>
#include <fstream>
#include <windows.h>
#include <stdio.h>
#include <WinBase.h>
#include <ctime>
#define NTHREAD 2
std::ofstream myfile;
DWORD WINAPI fce1 (LPVOID a){
time_t timerStart, timerNow;
time(&timerStart);
timerNow = timerStart;
while((timerNow - timerStart) < 3)
{
myfile << "1";
myfile.flush();
time(&timerNow);
}
return 0;
}
int main()
{
HANDLE threads[NTHREAD];
DWORD dwThreads[NTHREAD];
myfile.open("file.txt");
threads[0] = CreateThread(NULL, 0, fce1, NULL, 0, &dwThreads[0]);
if (threads[0] == NULL){
printf("Error\n");
}
myfile.close();
return 0;
}
대신 ['WaitForSingleObject'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx)를 사용하는 것이 더 좋지 않을까요? 'GetExitCodeThread'로 폴링합니까? –
@MichaelWalz 물론 그렇습니다. 저는 오랫동안 WIN32를 사용하지 않았기 때문에 더 이상 모든 기능을 기억하지 못했습니다. –
예 ... Java와 C++의 중요한 차이점이 있습니다. C++에서는 주 스레드가 특별합니다! 프로세스가 종료되면 전체 프로세스가 다른 모든 스레드와 함께 종료됩니다 (다른 모든 생성 된 스레드는 단지 DaemonThread입니다) – Falco