Create scan threads.

This commit is contained in:
Taeho Oh 2016-01-05 15:24:09 +09:00 committed by Taeho Oh
parent bee33bf997
commit 2e4d9d1587

View File

@ -41,12 +41,53 @@ typedef struct _OMVSScanner {
} OMVSScanner;
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) {
gint i;
for (i = 0; i < scanner->num_ipaddrs; i++) {
g_print("%08x\n", scanner->ipaddrs[i].addr);
gint num_ipaddrs_for_each_thread;
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;
}