All pastes #469510 Raw Edit

Something

public cpp v1 · immutable
·published 2007-05-03 19:46 UTC
rendered paste body
#include "Fetchwebpages.h"extern "C"{    #include "pthread.h"}using namespace std;Fetchwebpages::Fetchwebpages(){}Fetchwebpages::~Fetchwebpages(){}int main( int argc, const char* argv[] ){    Fetchwebpages fwp;        fwp.addpages();    fwp.getsources();}// Add some urls to our vectorvoid Fetchwebpages::addpages(){    pageinfo pi;    pi.url = "http://www.slashdot.org/";    pages.push_back(pi);    pi.url = "http://www.gardenaction.co.uk/fruit_veg_diary/fruit_veg_mini_project_september_2_apple_monarch.htm";    pages.push_back(pi);    pi.url = "http://www.arkansasapplefestival.org/";    pages.push_back(pi);    pi.url = "http://crave.cnet.co.uk/digitalmusic/0,39029432,49276362,00.htm";    pages.push_back(pi);    pi.url = "http://www.vintage-computer.com/apple_ii.shtml";    pages.push_back(pi);    pi.url = "http://school.discovery.com/clipart/clip/apple_lineart_color.html";    pages.push_back(pi);    pi.url = "http://gizmodo.com/gadgets/laptops-pcs/apple/apple-iproduct-a-rebuttal-029508.php";    pages.push_back(pi);    pi.url = "http://yodelt.wordpress.net/2005/05/";    pages.push_back(pi);    pi.url = "http://www.slashdot.org/";    pages.push_back(pi);    pi.url = "http://www.gardenaction.co.uk/fruit_veg_diary/fruit_veg_mini_project_september_2_apple_monarch.htm";    pages.push_back(pi);    pi.url = "http://www.arkansasapplefestival.org/";    pages.push_back(pi);    pi.url = "http://crave.cnet.co.uk/digitalmusic/0,39029432,49276362,00.htm";    pages.push_back(pi);    pi.url = "http://www.vintage-computer.com/apple_ii.shtml";    pages.push_back(pi);    pi.url = "http://school.discovery.com/clipart/clip/apple_lineart_color.html";    pages.push_back(pi);    pi.url = "http://gizmodo.com/gadgets/laptops-pcs/apple/apple-iproduct-a-rebuttal-029508.php";    pages.push_back(pi);    pi.url = "http://yodelt.wordpress.net/2005/05/";    pages.push_back(pi);}// Fetch url page sourcevoid *Fetchwebpages::fetchpage(void* url){    //cout << "In fetch page" << endl;        Retrievepage page;    string urls = (char *)url;    string source = "";        //cout << "Fetching... " << urls << endl;    // Get source for url    source = page.getpage((char *)url);    //cout << "Got page source of " << urls << endl;    // Convert source from string to char*    char *buf = (char*)malloc((source.size()*8)+1);    buf[0] = '\0';    strcpy(buf,source.c_str());	//cout << "About to exit fetchpage" << endl;    try    {        // Finished with thread, so stop it        pthread_exit((void *) buf);    }    catch(void* b)    {        cout << "Catching pthread exit: " << b << endl;    }        //cout << "Returning from fetchpage" << endl;    return buf;}// Get sources for lots of urls, using pthread and libcurlvoid Fetchwebpages::getsources(){    pthread_t Thread[pages.size()];    char* source[pages.size()];    string ssource[pages.size()];    void *srce;    // Create all the threads    for(int i=0; i<((int)pages.size());i++)    {        //cout << "Thread for: " << pages[i].getsiteurl() << " i: " << i << endl;        pthread_create( &Thread[i], NULL, fetchpage,(void *)(pages[i].url).c_str());    }    // Join all the threads	//cout << "off to join threads " << endl;    for(int i=0; i<((int)pages.size());i++)    {        //cout << "off to join " << i << endl;        //cout << "thread: " << Thread[i] << endl;        // srce should contain the page source after join        int res = pthread_join ( Thread[i], &srce );        //cout << "come back from join" << endl;        // Check if join was successful        if(res != 0)        {            cout << "Error joining thread: " << res << endl;            return;        }        //cout << "Joined successfully " << i << endl;        // Check thread returned a source        if(srce != NULL)        {            //cout << "srce != null" << endl;            // Convert page source to string            source[i] = (char *)srce;            ssource[i] = source[i];        }        else        {            //cout << "srce == null" << endl;            ssource[i] = "";        }        free(srce);       // Add page source into vector       pages[i].source = ssource[i];    }}