mirror of
https://bitbucket.org/ohhara/ohmulticastvideoscanner.git
synced 2025-06-28 18:26:52 +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