mirror of
				https://bitbucket.org/ohhara/ohmulticastvideoscanner.git
				synced 2025-10-30 18:07:54 +00:00 
			
		
		
		
	Create scan threads.
This commit is contained in:
		
							parent
							
								
									bee33bf997
								
							
						
					
					
						commit
						2e4d9d1587
					
				
							
								
								
									
										45
									
								
								omvs_main.c
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								omvs_main.c
									
									
									
									
									
								
							| @ -41,12 +41,53 @@ typedef struct _OMVSScanner { | |||||||
| } OMVSScanner; | } OMVSScanner; | ||||||
| 
 | 
 | ||||||
| static gint _omvs_start_scan(OMVSScanner *scanner); | static gint _omvs_start_scan(OMVSScanner *scanner); | ||||||
|  | static gpointer _omvs_start_scan_job(gpointer data); | ||||||
|  | 
 | ||||||
|  | static gpointer _omvs_start_scan_job(gpointer data) { | ||||||
|  |   OMVSScanner *scanner; | ||||||
|  |   gint i; | ||||||
|  | 
 | ||||||
|  |   scanner = (OMVSScanner *)data; | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < scanner->num_ipaddrs; i++) { | ||||||
|  |     g_print("%p %08x\n", (void *)g_thread_self(), scanner->ipaddrs[i].addr); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return NULL; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| static gint _omvs_start_scan(OMVSScanner *scanner) { | static gint _omvs_start_scan(OMVSScanner *scanner) { | ||||||
|   gint i; |   gint i; | ||||||
|   for (i = 0; i < scanner->num_ipaddrs; i++) { |   gint num_ipaddrs_for_each_thread; | ||||||
|     g_print("%08x\n", scanner->ipaddrs[i].addr); |   OMVSScanner *scanners; | ||||||
|  |   GThread **jobs; | ||||||
|  | 
 | ||||||
|  |   num_ipaddrs_for_each_thread = scanner->num_ipaddrs / _omvs_jobs; | ||||||
|  |   if (num_ipaddrs_for_each_thread == 0) { | ||||||
|  |     num_ipaddrs_for_each_thread = 1; | ||||||
|  |     _omvs_jobs = scanner->num_ipaddrs; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   scanners = g_malloc0(_omvs_jobs * sizeof(OMVSScanner)); | ||||||
|  |   jobs = g_malloc0(_omvs_jobs * sizeof(GThread *)); | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < _omvs_jobs; i++) { | ||||||
|  |     scanners[i].ipaddrs = &scanner->ipaddrs[i * num_ipaddrs_for_each_thread]; | ||||||
|  |     scanners[i].num_ipaddrs = num_ipaddrs_for_each_thread; | ||||||
|  |   } | ||||||
|  |   scanners[_omvs_jobs - 1].num_ipaddrs += (scanner->num_ipaddrs % _omvs_jobs); | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < _omvs_jobs; i++) { | ||||||
|  |     jobs[i] = g_thread_new(NULL, _omvs_start_scan_job, &scanners[i]); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < _omvs_jobs; i++) { | ||||||
|  |     g_thread_join(jobs[i]); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   g_free(jobs); | ||||||
|  |   g_free(scanners); | ||||||
|  | 
 | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user