Archief - [C] Thread in thread {multithread}

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

AliChemicali

Legacy Member
Hallo!

Ik probeer een thread te starten vanuit een andere thread maar die wilt niet launchen....

Code:
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>

// Secound Thread function
void ThreadProc(void *param);
void ThreadProc2(void *param);

// First thread 
int main()
{

	int n;
	int i;
	int val = 0;
	HANDLE handle;
	
	printf("\t Thread Demo\n");

	printf("Enter the number of threads : ");
	scanf("%d",&n);
	

	/*for(i=0;i<n;i++)
	{*/
//		val = i+1;
		handle = (HANDLE) _beginthread( ThreadProc,0,&val); // create thread
		WaitForSingleObject(handle,INFINITE);
		
		
	//}


	return 0;
}


void ThreadProc(void *param)
{
	HANDLE handle;
	int val = 0;
	int h=*((int*)param);
	printf("%d Thread is Running!\n",h);
	handle = (HANDLE)_beginthread( ThreadProc,0,&val); // create thread
	//_endthread();

}

void ThreadProc2(void *param)
{
	printf("dit is een test");
}

NeverwinterX

Legacy Member
MaSSaSLaYeR zei:
Hallo!

Ik probeer een thread te starten vanuit een andere thread maar die wilt niet launchen....

Code:
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>

// Secound Thread function
void ThreadProc(void *param);
void ThreadProc2(void *param);

// First thread 
int main()
{

	int n;
	int i;
	int val = 0;
	HANDLE handle;
	
	printf("\t Thread Demo\n");

	printf("Enter the number of threads : ");
	scanf("%d",&n);
	

	/*for(i=0;i<n;i++)
	{*/
//		val = i+1;
		handle = (HANDLE) _beginthread( ThreadProc,0,&val); // create thread
		WaitForSingleObject(handle,INFINITE);
		
		
	//}


	return 0;
}


void ThreadProc(void *param)
{
	HANDLE handle;
	int val = 0;
	int h=*((int*)param);
	printf("%d Thread is Running!\n",h);
	[U]handle = (HANDLE)_beginthread( ThreadProc,0,&val);[/U] // create thread
	//_endthread();

}

void ThreadProc2(void *param)
{
	printf("dit is een test");
}

In het onderlijnde stuk moet dat niet ThreadProc2 zijn? Nu gaat ie oneindig veel van de eerste starten, krijg je niet erg veel "Thread is Running!" te zien?

AliChemicali

Legacy Member
Zo werkt het dus wel, kan iemand dit verklaren:

Code:
void ThreadProc(void *param)
{
	HANDLE handle;
	int val = 0;
	int h=*((int*)param);
	printf("Thread 1\n");
	handle = (HANDLE)_beginthread(ThreadProc2,0,&val); // create thread
	_endthread();
}

void ThreadProc2(void *param)
{
	printf("Thread 2\n");
	_endthread();
}


En dit zou ik moeten hebben en werkt dan niet

Code:
void ThreadProc(void *param)
{
	HANDLE handle;
	int val = 0;
	int h=*((int*)param);
	printf("Thread 1\n");
	handle = (HANDLE)_beginthread(ThreadProc2,0,&val); // create thread
	_endthread();
}

void ThreadProc2(void *param)
{
	for(;;) {
		printf("Thread 2\n");
	}
	_endthread();
}

Output runt maar 1 x ipv oneindig keer:

threadsucks.png





Wat is het verschil tussen:

_beginthread(ServerTalking,0, (void *)sockfd);

en

_beginthread(ServerTalking,0, &sockfd);

NeverwinterX

Legacy Member
MaSSaSLaYeR zei:
Zo werkt het dus wel, kan iemand dit verklaren:

Code:
void ThreadProc(void *param)
{
	HANDLE handle;
	int val = 0;
	int h=*((int*)param);
	printf("Thread 1\n");
	handle = (HANDLE)_beginthread(ThreadProc2,0,&val); // create thread
	_endthread();
}

void ThreadProc2(void *param)
{
	printf("Thread 2\n");
	_endthread();
}


En dit zou ik moeten hebben en werkt dan niet

Code:
void ThreadProc(void *param)
{
	HANDLE handle;
	int val = 0;
	int h=*((int*)param);
	printf("Thread 1\n");
	handle = (HANDLE)_beginthread(ThreadProc2,0,&val); // create thread
	_endthread();
}

void ThreadProc2(void *param)
{
	for(;;) {
		printf("Thread 2\n");
	}
	_endthread();
}

Output runt maar 1 x ipv oneindig keer:

threadsucks.png





Wat is het verschil tussen:

_beginthread(ServerTalking,0, (void *)sockfd);

en

_beginthread(ServerTalking,0, &sockfd);

Dat komt omdat je thread 2 wel oneindig lang laat doorgaan, maar de main thread niet. Die stopt meteen nadat je uw thread opstart en aangezien dat de main thread van de applicatie is, stopt dat ook de andere threads daarin. Voeg op het einde van uw main toe:
Code:
while(1){}

NeverwinterX

Legacy Member
Cycloon zei:
Altijd leuk zo'n lusje die je volle CPU gaat opeten.

Het is ook maar een proof of concept, niet de bedoeling dat je zoiets in productie zet.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan