The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
Google UNIX.COM


High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
create function with awk kamel.seg Shell Programming and Scripting 2 12-24-2007 01:36 PM
How to create SQRT function in catenate file ahjiefreak Shell Programming and Scripting 7 12-10-2007 08:31 AM
string returning function jisc High Level Programming 5 03-23-2006 06:35 AM
How to cancel a thread safely from the initial thread? alan.zhao High Level Programming 1 04-29-2005 07:07 AM
create thread C with JNI function with JAVA AUBERT HP-UX 0 08-06-2004 02:24 AM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 05-07-2008
Registered User
 

Join Date: Mar 2008
Posts: 10
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Reddit! Stumble this Post!Spurl this Post!
create a thread from a returning function

hi all,
my requirement is to create a thread by calling another function.
i.e i dont call pthread_create directly from main, but by calling another function (createThd - below ), from main.
Example:
[code]

void *thread_function(void *arg) { /* thread function */
int i;
rc = pthread_detach(pthread_self());
for ( ; ; ) {
printf("Thread says hi!\n");
sleep(1);
}
pthread_exit(NULL);
}

int main(void) {

int i;
i = createThd(); /* call to thread creating function */

return (0);

}

int createThd()
{
int rc = 0;
pthread_t mythread;

if ( pthread_create( &mythread, NULL, thread_function, NULL) ) {
printf("error creating thread.");
return(-1);
}
return 0;
}
[\CODE]
this creates the thread but doesnt run it, thread terminates as soon as the function createThd() returns.
is there a way to overcome this problem.

any help is appreciated, thankx in advanced.
wolwy.
Reply With Quote
Forum Sponsor
  #2 (permalink)  
Old 05-08-2008
Registered User
 

Join Date: Dec 2007
Location: Virginia, USA.
Posts: 211
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Reddit! Stumble this Post!Spurl this Post!
The reason this is not working is that your main function doesn't have an event loop and/or doesn't block on the created thread.
An easy way out is to return the created thread tid, do not detach, and call pthread_join in main.

HTH.
Reply With Quote
  #3 (permalink)  
Old 05-08-2008
andryk's Avatar
Registered User
 

Join Date: Sep 2003
Posts: 448
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Reddit! Stumble this Post!Spurl this Post!
Quote:
Originally Posted by wolwy_pete View Post
hi all,
my requirement is to create a thread by calling another function.
i.e i dont call pthread_create directly from main, but by calling another function (createThd - below ), from main.
Example:
Code:
void *thread_function(void *arg) {  /* thread function */
	int i;
	rc = pthread_detach(pthread_self());
	for ( ; ; )  {
		printf("Thread says hi!\n");
		sleep(1);
	}
	pthread_exit(NULL);
}

int main(void) {

	int i;
	i = createThd();  /* call to thread creating function */

	return (0);

}

int createThd()
{
	int rc = 0;
	pthread_t mythread;

	if ( pthread_create( &mythread, NULL, thread_function, NULL) ) {
		printf("error creating thread.");
		return(-1);
	}
	return 0;
}
this creates the thread but doesnt run it, thread terminates as soon as the function createThd() returns.
is there a way to overcome this problem.

any help is appreciated, thankx in advanced.
wolwy.
Hi,
You could wait on createThd() until thread_function() has done his job by means of pthread_cond_wait/pthread_cond_signal & mutexes, just like a parent process would wait (with wait/waitpid) for its child to terminate...
Reply With Quote
  #4 (permalink)  
Old 05-08-2008
Registered User
 

Join Date: Mar 2008
Posts: 10
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Reddit! Stumble this Post!Spurl this Post!
thankx ramen_noodle & andryk
ramen_noodle was actually correct, sorry abt my lack of knowledge.
i put a loop in my main program and it was ok.
wolwy.
Reply With Quote
Google UNIX.COM
Reply

Thread Tools
Display Modes


The 50 most popular UNIX and Linux searches.
Google Search Cloud for The UNIX and Linux Forums
"inappropriate ioctl for device" 421 service not available, remote server has closed connection ^m arg list too long ascii eof autosys awk trim bash eval bash exec bash for loop boot: cannot open kernel/sparcv9/unix close_wait command copy/move folder in unix curses.h dead.letter export display find grep grep multiple lines grep or grep recursive grep unique inappropriate ioctl for device logrotate.conf lynx javascript mailx attachment mget mtime perl array length ping port read awk output into multiple variables replace space by comma , perl script scp recursive segmentation fault(coredump) sftp script snoop unix stale nfs file handle syn_sent tar exclude unix unix .profile unix com unix forum unix forums unix interview questions unix memory usage unix mtime unix simulator unix.com vi tab size while loop within while loop shell script


All times are GMT -7. The time now is 03:30 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008 The CEP Blog All Rights Reserved -Ad Management by RedTyger Visit The Global Fact Book

Content Relevant URLs by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101